我正在尝试为我的文件上传创建一个进度条,所以我需要一种方法来知道文件在任何时间点被上传的状态。
def simple_upload(request):
if request.method == 'POST' and request.FILES['image']:
file = request.FILES['image']
fs = FileSystemStorage()
for chunk in file.chunks():
image = ImageFile(io.BytesIO(chunk), name=file.name)
filename = fs.save(file.name, content=image)我正在寻找一种方法来保存块,然后将它们转换成图像保存,我不想使用python读取和正确的接口,因为我将上传文件到aws。谁能给我指个正确的方向。
发布于 2021-07-15 09:10:59
我不能测试它,所以它可能不能解决所有问题,但你应该在for-loop之前只创建一个BytesIO,并使用write(chunk) inside循环。
def simple_upload(request):
if request.method == 'POST' and request.FILES['image']:
file = request.FILES['image']
fs = FileSystemStorage()
# only one `BytesIO`
buffer = io.BytesIO()
# append chunks
for chunk in file.chunks():
buffer.write(chunk)
# move to the beginning of buffer
# to use buffer with functions which will read from buffer
buffer.seek(0)
# only one `ImageFile`
image = ImageFile(buffer, name=file.name)
filename = fs.save(file.name, content=image)但它还有其他问题。服务器将运行它,直到它得到所有的块,页面将不得不等待服务器的响应。但与此同时,页面应该使用AJAX运行JavaScript,定期向其他url发送请求,以获取已向BytesIO添加了多少块的信息。
但这也带来了其他问题- simple_upload必须将这些信息(它已经获得了多少块)保存在数据库中,或者保存在用户上传它的某个文件中-所以以后当不同的用户同时发送文件时,AJAX将获得正确的值。
因此,它可能有许多问题需要解决。
https://stackoverflow.com/questions/68384739
复制相似问题