簡體   English   中英

Flask 'tuple' object 在保存文件時沒有屬性 'write'

[英]Flask 'tuple' object has no attribute 'write' on saving file

當我想保存在發布請求中收到的文件時,我在 flask 上收到此有線錯誤。 我嘗試調試,但我不明白該錯誤,因為我使用 flask 保存,並且在 google 和其他堆棧溢出問題上,我發現這與 python 文件 API 相關,但沒有打開或錯誤的標志,但沒有任何標志,或者不需要在這里打開任何文件。

我如何發送文件:

const uploadFile = async (file) =>{
  const formData = new FormData();
  formData.append("file", file);
  fetch("http://localhost:5000/files/upload", {method: "POST", body: formData});
}

我如何接收文件:

@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 function 中打印文件名,我會得到正確的名稱。

錯誤:

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'

我發現了這個問題。 我的路徑錯誤,文件名應該在 os.path.join()

file.save((os.path.join(root_dir,'backend', 'upload', filename)))

您指定的文件路徑不正確。 您正在嘗試將元組作為文件路徑寫入:

>>> root_dir =  '/root/'
>>> filename = 'test.png'
>>> (os.path.join(root_dir,'backend', 'upload'), filename)
('/root/backend/upload', 'test.png')

您應該在os.path.join調用中移動文件名。

>>> os.path.join(root_dir,'backend', 'upload', filename)
'/root/backend/upload/test.png'

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM