2

ジャンゴのupload_toのように

def upload_to(instance, filename):
    filename = time.strftime('%Y%m%d%H%M%S')
    ym = time.strftime('%Y%m')
    return 'uploads/%s/%s.jpg' % (ym,filename)

class Person(models.Model):
    first_name = models.CharField(max_length=30)
    last_name = models.CharField(max_length=30)
    photo = models.ImageField(u"Image (Upload)",upload_to=upload_to)

ファイルが保存されました 'uploads/%s/%s.jpg'

しかし、

photo = FileBrowseField("Image", max_length=200, directory="uploads/", extensions=[".jpg"], blank=True, null=True)

djangoのupload_toのようなフォルダーにアップロードする前にファイルの名前を変更する方法

4

1 に答える 1

1

filebrowser/sites.py で、アップロード/アップロードの処理時にこのフックを作成できます。

def _upload_file(self, request):
    """
    Upload file to the server.
    """
    if request.method == "POST":
        folder = request.GET.get('folder', '')

        if len(request.FILES) == 0:
            return HttpResponseBadRequest('Invalid request! No files included.')
        if len(request.FILES) > 1:
            return HttpResponseBadRequest('Invalid request! Multiple files included.')

        filedata = list(request.FILES.values())[0]

        fb_uploadurl_re = re.compile(r'^.*(%s)' % reverse("filebrowser:fb_upload", current_app=self.name))
        folder = fb_uploadurl_re.sub('', folder)

        path = os.path.join(self.directory, folder)
        # we convert the filename before uploading in order
        # to check for existing files/folders
        file_name = convert_filename(filedata.name)
        filedata.name = file_name
        file_path = os.path.join(path, file_name
        ....

ここで file_path を好きなように変更するか、ファイル名を変更できます。

ファイルが上書きされないようにしたいだけの場合は、settings.py で次のように FILEBROWSER_OVERWRITE_EXISTING フラグを設定できます。

FILEBROWSER_OVERWRITE_EXISTING = False

これにより、ファイルを編集するときに一意の名前を付けることができます。また、filebrowser/utils.py で定義されている filebrowsers convert_filename メソッドを使用して、新しいアップロードでファイル名が一意の名前に変換されます。

filebrowser 設定の詳細については、こちらを参照してください。お役に立てれば :)

于 2014-11-11T18:41:28.477 に答える