diff --git a/pkg/files/file.go b/pkg/files/file.go
index 8f9f3bfe70a173318196dd630e4093bdf16028d5..0e4d89f7004413b2c2a0ae9eff663cdcfc0ef3a1 100644
--- a/pkg/files/file.go
+++ b/pkg/files/file.go
@@ -1,9 +1,11 @@
 package files
 
 import (
+	"bytes"
 	"fmt"
 	"io/fs"
 	"strings"
+	"text/template"
 
 	"git.perx.ru/perxis/perxis-go/pkg/id"
 )
@@ -31,6 +33,20 @@ func (f File) Temporary() bool {
 	return strings.HasPrefix(f.ID, TemporaryPrefix)
 }
 
+func (f *File) SetURLWithTemplate(t *template.Template) error {
+	if t == nil {
+		return nil
+	}
+
+	res := new(bytes.Buffer)
+	if err := t.Execute(res, f); err != nil {
+		return err
+	}
+
+	f.URL = res.String()
+	return nil
+}
+
 func (f File) Fetch(i interface{}) interface{} {
 	p, _ := i.(string)
 	switch p {