我正在尝试构建一个django驱动的文件上传器,它将文件直接上传并存储到目标位置,而不会在任何临时位置缓存该文件。到目前为止,我理解的是,我们应该编写一个自定义FileUploadHandler
来实现这一点。所以我想出了以下内容。
class DirectUploadHandler(FileUploadHandler):
def __init__(self, request=None):
super().__init__(request)
self.field_name = None
self.file_name = None
self.content_type = None
self.content_length = None
self.charset = None
self.content_type_extra = None
self.request = request
self.file = None
def new_file(self, field_name, file_name, content_type, content_length, charset=None, content_type_extra=None):
self.field_name = field_name
self.file_name = file_name
self.content_type = content_type
self.content_length = content_length
self.charset = charset
self.content_type_extra = content_type_extra
self.file = open('\\\\10.0.8.5\\filename.ext', 'wb+')
def receive_data_chunk(self, raw_data, start):
self.file.write(raw_data)
def file_complete(self, file_size):
self.file.seek(0)
self.file.size = file_size
return self.file
现在上传工作正常,它直接写入目的地。但我注意到在完全写入目标文件之前调用了file_complete
方法。所有代码执行完成,django视图返回完成上传。文件仍然在增长,完成写作需要几秒钟。为什么延迟完成写入过程?为什么在文件实际完成写入之前调用file_complete
方法?