3

我正在尝试将文件从桌面上传到在本地机器上运行的 Flask,而根本不使用 Web 表单。我查看了 BOTH Python RequestsPoster的示例。

这是我的 Flask API 的代码

from flask import Flask
from flask import request
app = Flask(__name__)

@app.route('/')
def hello_world():
    return 'Hello World!'

@app.route('/upload', methods= ['GET', 'POST'])
def upload_file():
    if request.method == 'POST':
        f = request.files['files']
        f.save('/Users/djangod/newTest.txt')
        return '200'
    else:
        return 'Upload Page'

if __name__ == '__main__':
    app.debug = True
    app.run()

这是我的 Python 脚本中使用Requests的代码

import requests

url = "http://127.0.0.1:5000/upload"
files = {'file': open('/Users/djangod/text.txt', 'rb')}
r = requests.post(url, files=files)

我收到错误 400 并且无法弄清楚原因,但是由于某些奇怪的原因,运行此 curl 命令有效

curl -i -X POST -F files=@test.txt http://127.0.0.1:5000/upload

我最初认为 Flask 配置不正确,直到 curl 工作。我在 OS X 10.8.5 上运行并使用 virtualenv。任何帮助将不胜感激。提前致谢。

4

1 回答 1

7

您的请求代码错误(可能是错字)。以下是应该工作的内容和您拥有的内容之间的不同之处:

files = {'files': open('/Users/djangod/text.txt', 'rb')}
#             ^ missing an s

您正在告诉 Flask 查找一个名为的文件,'files'因此您需要告诉请求将其作为文件名发送。

于 2013-10-13T01:35:53.570 回答