【问题标题】:Flask FileStorage object to File Object烧瓶 FileStorage 对象到文件对象
【发布时间】:2017-01-19 03:49:04
【问题描述】:

我通过flask 制作了一个api,它提交了一个文件,在后端收到它后,我想进一步使用python requests 模块将它上传到一个未知的服务器

如果我这样做,服务器会接受文件 -

requests.post(urlToUnknownServer,files={'file':open('pathToFile')})

现在我的要求是通过烧瓶上传文件参数。
在烧瓶中,我将文件作为FileStorage 对象。我不想将其保存在我的服务器上,而是直接希望它进一步上传。
所以基本上我想将FileStorage对象转换为open()函数的返回类型file(如果我错了,请在这里纠正我)

我试过用 -

obj=file(request.files['fileName'].read().encode('string-escape'))
requests.post(urlToUnknownServer,files={'file':obj})

这不起作用。是否可以在不将文件保存在我的服务器上的情况下做到这一点。

【问题讨论】:

  • 嗨,Sagar,我也遇到了同样的问题。你找到解决方案了吗?我想从文件存储对象中提取文件。
  • @Sagar 我也有这个问题。我正在使用邮递员将文件发送到烧瓶 api。然后我的烧瓶 api 将文件发送到 3rd 方 api。例如 r = requests.post(url, headers=headers, data=payload, files={'file': file.read()}) 。我在 3rd 方 api 上遇到问题。 3rd 方 api 说无效的图像扩展...我使用邮递员将相同的图像直接发送到 3rd 方 api 然后它可以工作...帮助我。

标签: python flask io


【解决方案1】:

尝试不使用 file() 构造函数:

obj = request.files['fileName'].read().encode('string-escape')
requests.post(urlToUnknownServer,files={'file':obj})

【讨论】:

    【解决方案2】:

    也许您可以使用 read() 而不对其进行编码。比如这样:

    obj=request.files['fileName'].read()
    requests.post(urlToUnknownServer,files={'file':obj})
    

    【讨论】:

    • 我正在使用邮递员将文件发送到flask api。然后我的烧瓶 api 将文件发送到 3rd 方 api。例如 r = requests.post(url, headers=headers, data=payload, files={'file': file.read()}) 。我在 3rd 方 api 上遇到问题。第 3 方 api 说无效的图像扩展...我使用邮递员将相同的图像直接发送到第 3 方 api 然后它可以工作...帮助我。
    • @NaisargParmar 您是否通过邮递员发送的烧瓶发送所有标题?
    • @sagar 感谢回复..我将此请求发送到 3rd 方 api r = requests.post(url, headers=headers, data=payload, files={'file': (file.filename, file.read(), file.content_type)})。现在有了这个发布请求,至少我可以向他们的服务器创建文件..但是文件的内容是空的。这意味着 file.read() 无法正常工作
    • @NaisargParmar 有空文件吗?
    • @PreritMohan 我做了一点小技巧。 1.我将文件保存在后端。 2. 读取该文件。 3. 将该文件附加到第 3 方 api。 4.删除后台文件。 # 保存文件 file = request.files['file'] file.save(secure_filename(file.filename)) # 将文件发送到第 3 方 API r = requests.post(url, headers=headers, data=payload, files={ 'file': (file.filename, open(file.filename, 'rb'), file.content_type)}) # 删除文件 os.remove(file.filename)
    【解决方案3】:

    对于遇到同样问题的任何人,只需转换为BufferedReader

    像这样:

        from io import BufferedReader
        image = request.files.get('name')
        image.name = image.filename
        image = BufferedReader(image)
    

    然后你就可以发帖了

        requests.post(urlToUnknownServer,files={'file' : image})
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-04-25
      • 2020-06-14
      • 1970-01-01
      • 2021-07-24
      • 1970-01-01
      • 1970-01-01
      • 2018-09-27
      相关资源
      最近更新 更多