首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Flask 'tuple‘对象在保存文件时没有'write’属性

Flask 'tuple‘对象在保存文件时没有'write’属性
EN

Stack Overflow用户
提问于 2020-07-16 17:29:08
回答 2查看 182关注 0票数 0

当我想要保存在post请求中接收到的文件时,我在flask上得到了这个有线错误。我试着调试,但我不理解这个错误,因为我使用flask save,在google和其他堆栈溢出问题上,我发现这必须与python文件API一样缺少打开或错误的标志,但我没有任何标志,或不需要在这里打开任何文件。

我是如何发送文件的:

代码语言:javascript
运行
复制
const uploadFile = async (file) =>{
  const formData = new FormData();
  formData.append("file", file);
  fetch("http://localhost:5000/files/upload", {method: "POST", body: formData});
}

我是如何接收文件的:

代码语言:javascript
运行
复制
@app.route('/files/upload', methods = ['POST'])
def recive_upload_file():
    file = request.files['file']
    filename = file.filename
    root_dir = os.path.dirname(os.getcwd())
    file.save((os.path.join(root_dir,'backend', 'upload'), filename))
    return "done"

据我所知,文件发送是正确的,因为如果我尝试在recive_uploaded_file函数中打印文件名,我会得到正确的名称。

错误:

代码语言:javascript
运行
复制
Traceback (most recent call last):
  File "c:\Python37\lib\site-packages\flask\app.py", line 2447, in wsgi_app
    response = self.full_dispatch_request()
  File "c:\Python37\lib\site-packages\flask\app.py", line 1952, in full_dispatch_request
    rv = self.handle_user_exception(e)
  File "c:\Python37\lib\site-packages\flask_cors\extension.py", line 161, in wrapped_function
    return cors_after_request(app.make_response(f(*args, **kwargs)))
  File "c:\Python37\lib\site-packages\flask\app.py", line 1821, in handle_user_exception
    reraise(exc_type, exc_value, tb)
  File "c:\Python37\lib\site-packages\flask\_compat.py", line 39, in reraise
    raise value
  File "c:\Python37\lib\site-packages\flask\app.py", line 1950, in full_dispatch_request
    rv = self.dispatch_request()
  File "c:\Python37\lib\site-packages\flask\app.py", line 1936, in dispatch_request
    return self.view_functions[rule.endpoint](**req.view_args)
  File "index.py", line 239, in upload_file
    file.save((os.path.join(root_dir,'backend', 'upload'), filename))
  File "c:\Python37\lib\site-packages\werkzeug\datastructures.py", line 3070, in save
    copyfileobj(self.stream, dst, buffer_size)
  File "c:\Python37\lib\shutil.py", line 82, in copyfileobj
    fdst.write(buf)
AttributeError: 'tuple' object has no attribute 'write'
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-07-16 17:37:01

您指定的文件路径不正确。您正在尝试以文件路径的形式写入元组:

代码语言:javascript
运行
复制
>>> root_dir =  '/root/'
>>> filename = 'test.png'
>>> (os.path.join(root_dir,'backend', 'upload'), filename)
('/root/backend/upload', 'test.png')

您应该将文件名移动到os.path.join调用中。

代码语言:javascript
运行
复制
>>> os.path.join(root_dir,'backend', 'upload', filename)
'/root/backend/upload/test.png'
票数 0
EN

Stack Overflow用户

发布于 2020-07-16 17:35:49

我找到问题了。我有错误的路径,文件名应该在os.path.join()中

代码语言:javascript
运行
复制
file.save((os.path.join(root_dir,'backend', 'upload', filename)))
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62931611

复制
相关文章

相似问题

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