不使用表单上传文件的Python脚本,只使用Flask作为API

dja*_*o-d 2 python flask python-requests

我正在尝试将文件从我的桌面上传到我在本地计算机上运行的Flask,而根本不使用网络表单.我看过两个Python 请求海报的例子.

这是我的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()
Run Code Online (Sandbox Code Playgroud)

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

import requests

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

我得到一个错误400,无法弄清楚为什么,但由于一些奇怪的原因运行此curl命令工作

curl -i -X POST -F files=@test.txt http://127.0.0.1:5000/upload
Run Code Online (Sandbox Code Playgroud)

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

Ian*_*sco 6

您的请求代码错误(可能是拼写错误).下面是什么应该工作和你有什么不同:

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

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