将一个大文件的FileField时避免复制(Avoid copying when adding a

2019-10-17 08: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')))

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

Answer 1:

我会说,最简单的方法是编写自己的领域或存储。



Answer 2:

有点晚了,但是:

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


文章来源: Avoid copying when adding a large file to FileField