相关疑难解决方法(0)

使用Flask上传多个文件

有没有办法用Flask接收多个上传的文件?我尝试过以下方法:

<form method="POST" enctype="multipart/form-data" action="/upload">
  <input type="file" name="file[]" multiple="">
  <input type="submit" value="add">
</form>
Run Code Online (Sandbox Code Playgroud)

然后打印出以下内容request.files['file']:

@app.route('/upload', methods=['POST'])
def upload():
  if not _upload_dir:
    raise ValueError('Uploads are disabled.')

  uploaded_file = flask.request.files['file']
  print uploaded_file
  media.add_for_upload(uploaded_file, _upload_dir)
  return flask.redirect(flask.url_for('_main'))
Run Code Online (Sandbox Code Playgroud)

如果我上传多个文件,它只打印集合中的第一个文件:

<FileStorage: u'test_file.mp3' ('audio/mp3')>  
Run Code Online (Sandbox Code Playgroud)

有没有办法使用Flask的内置上传处理接收多个文件?谢谢你的帮助!

python file-upload flask

48
推荐指数
4
解决办法
4万
查看次数

Python请求:在单个请求中发布JSON和文件

我需要进行API调用以上传文件以及带有文件详细信息的JSON字符串.

我试图使用python请求lib来做到这一点:

import requests

info = {
    'var1' : 'this',
    'var2'  : 'that',
}

data = json.dumps({
    'token' : auth_token,
    'info'  : info,
})

headers = {'Content-type': 'multipart/form-data'}

files = {'document': open('file_name.pdf', 'rb')}

r = requests.post(url, files=files, data=data, headers=headers)
Run Code Online (Sandbox Code Playgroud)

这会引发以下错误:

    raise ValueError("Data must not be a string.")
 ValueError: Data must not be a string
Run Code Online (Sandbox Code Playgroud)

如果我从请求中删除"文件",它就可以了.
如果我从请求中删除"数据",它就可以工作.
如果我不将数据编码为JSON,则可以正常工作.

出于这个原因,我认为错误与在同一请求中发送JSON数据和文件有关.

关于如何使这个工作的任何想法?

python json urllib2

28
推荐指数
2
解决办法
4万
查看次数

如何将JSON作为多部分POST请求的一部分发送

我有以下POST请求表单(简化):

POST /target_page HTTP/1.1  
Host: server_IP:8080
Content-Type: multipart/form-data; boundary=AaaBbbCcc

--AaaBbbCcc
Content-Disposition: form-data; name="json" 
Content-Type: application/json

{ "param_1": "value_1", "param_2": "value_2"}

--AaaBbbCcc
Content-Disposition: form-data; name="file"; filename="..." 
Content-Type: application/octet-stream

<..file data..>
--AaaBbbCcc--
Run Code Online (Sandbox Code Playgroud)

我尝试发送POST请求requests:

import requests
import json

file = "C:\\Path\\To\\File\\file.zip"
url = 'http://server_IP:8080/target_page'


def send_request():
    headers = {'Content-type': 'multipart/form-data; boundary=AaaBbbCcc'}

    payload = { "param_1": "value_1", "param_2": "value_2"}

    r = requests.post(url, files={'json': (None, json.dumps(payload), 'application/json'), 'file': (open(file, 'rb'), 'application/octet-stream')}, headers=headers)

    print(r.content)

if __name__ == '__main__':
    send_request()
Run Code Online (Sandbox Code Playgroud)

但它返回状态,400并带有以下注释:

Required request …
Run Code Online (Sandbox Code Playgroud)

python json multipartform-data http-post python-requests

5
推荐指数
1
解决办法
7995
查看次数