【问题标题】:Avoid copying when adding a large file to FileField向 FileField 添加大文件时避免复制
【发布时间】:2009-08-19 13:44:05
【问题描述】:

我正在处理一些通过 http 上传不舒服的非常大的文件,因此我的用户使用 FTP 上传文件,然后我的代码需要移动到 FileField.upload_to (它们通常在通过 HTTP 上传时结束)。我的问题是,常用的使用django.core.files.File的方法:

from django.core.files import File

# filename is a FileField
file_obj = MyModel(filename=File(open('VIDEO_TS.tar', 'rb')))

导致复制数据,这是我需要避免的。有没有办法在确保调用 upload_to 的同时将已经存在的文件添加到 FileField 中?

【问题讨论】:

    标签: django filefield


    【解决方案1】:

    有点晚了,但是:

    class _ExistingFile(UploadedFile):
        """ Utility class for importing existing files to FileField's. """
    
        def __init__(self, path, *args, **kwargs):
            self.path = path
            super(_ExistingFile, self).__init__(*args, **kwargs)
    
        def temporary_file_path(self):
            return self.path
    
        def close(self):
            pass
    
        def __len__(self):
            return 0
    

    用法:

    my_model.file_field.save(upload_to, _ExistingFile('VIDEO_TS.tar'))
    

    【讨论】:

      【解决方案2】:

      我想说最简单的方法是编写自己的字段或存储。

      【讨论】:

        猜你喜欢
        • 2013-02-06
        • 1970-01-01
        • 2018-09-30
        • 1970-01-01
        • 1970-01-01
        • 2020-09-23
        • 1970-01-01
        • 2019-02-12
        • 1970-01-01
        相关资源
        最近更新 更多