将大文件添加到FileField时避免复制

时间:2009-08-19 13:44:05

标签: django filefield

我正在处理一些非常大的文件,这些文件很难通过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')))

导致复制数据,我需要避免。有没有办法将现有文件添加到FileField,同时确保调用upload_to?

2 个答案:

答案 0 :(得分:3)

有点晚了,但是:

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'))

答案 1 :(得分:0)

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