首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将django fileobject.chunks()转换为图像

将django fileobject.chunks()转换为图像
EN

Stack Overflow用户
提问于 2021-07-15 04:32:55
回答 1查看 50关注 0票数 0

我正在尝试为我的文件上传创建一个进度条,所以我需要一种方法来知道文件在任何时间点被上传的状态。

代码语言:javascript
复制
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。谁能给我指个正确的方向。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-07-15 09:10:59

我不能测试它,所以它可能不能解决所有问题,但你应该在for-loop之前只创建一个BytesIO,并使用write(chunk) inside循环。

代码语言:javascript
复制
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将获得正确的值。

因此,它可能有许多问题需要解决。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68384739

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档