【问题标题】:How to use django-filebrowser rename a file before uploading it to a folder如何在将文件上传到文件夹之前使用 django-filebrowser 重命名文件
【发布时间】:2012-04-22 08:50:07
【问题描述】:

喜欢django的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

【问题讨论】:

标签: django upload django-filebrowser


【解决方案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 方法将新上传的文件名转换为唯一的文件名

更多关于文件浏览器设置here。希望这会有所帮助:)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-12-02
    • 2019-10-22
    • 2023-04-02
    • 2016-09-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多