OkHttp将多个名为的文件上载到Python Flask s

2024-04-27 03:40:14 发布

您现在位置:Python中文网/ 问答频道 /正文

在服务器端,我使用Python flask:

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

@app.route("/upload", methods=["POST"])
def upload():
    print request.files
    print request.form
    return "200 ok"

if __name__ == '__main__':
    app.run(port=5000)

Java测试代码块:

^{pr2}$

我做了测试。服务器端无法从request.forms读取文件

服务器上的输出:

ImmutableMultiDict([])
ImmutableMultiDict([('image', u'5 ...many data ... fffd'), ('google', u'5i\u ...many data ... fffd'),('title', u'Square Logo')])

为什么我的文件上载到request.form而不是request.files。所有二进制文件数据都被解析为unicode字符串。在

接下来,我用Python请求进行测试。遵循以下代码:

resp = requests.post("http://localhost:5000/upload",
                         files={
                             "image": open("/Users/lollipop/Downloads/ic_launch.png", "rb"),
                             "title": open("/Users/lollipop/Downloads/ic_launch.png", "rb"),
                             "google": open("/Users/lollipop/Downloads/google-logo.png", "rb")
                         })

服务器端输出被反转:

ImmutableMultiDict([('image', <FileStorage: u'ic_launch.png' (None)>), ('google', <FileStorage: u'google-logo.png' (None)>), ('title', <FileStorage: u'ic_launch.png' (None)>)])
ImmutableMultiDict([])

上载文件在request.files中,而不是在request.form中,这是我预期的结果。在

所以。如何使用OkHttp将文件上载到flask服务器,并使用request.files进行检索。在

更新

request是烧瓶的要求。在

from flask import request

requests是一个pythonhttp客户端库。在


Tags: 文件imageformappflaskpngtitlerequest
1条回答
网友
1楼 · 发布于 2024-04-27 03:40:14

这只虫子不适合烧瓶。我被这个误导了answer

在文档中的OkHttp食谱上。描述了post一个文件使用下面的代码

public static final MediaType MEDIA_TYPE_MARKDOWN
      = MediaType.parse("text/x-markdown; charset=utf-8");

  private final OkHttpClient client = new OkHttpClient();

  public void run() throws Exception {
    File file = new File("README.md");

    Request request = new Request.Builder()
        .url("https://api.github.com/markdown/raw")
        .post(RequestBody.create(MEDIA_TYPE_MARKDOWN, file))
        .build();

    Response response = client.newCall(request).execute();
    if (!response.isSuccessful()) throw new IOException("Unexpected code " + response);

    System.out.println(response.body().string());
  }

实际上,这种方式并不是错误的,它发布的文件不需要提供文件名和其他表单数据。 但这不是通常的用法。在

我们经常需要上传一个具有指定名称和一些键值表单数据的文件。我们甚至需要上传多个文件。在

^{pr2}$

相关问题 更多 >