【问题标题】:JSON.stringify sends empty object from FileList to server [duplicate]JSON.stringify 将空对象从 FileList 发送到服务器 [重复]
【发布时间】:2020-07-06 17:50:54
【问题描述】:

如果没有form,我正在尝试使用 AJAX 将多个文件发布到我的服务器。

这是输入文件

<input id="images_input" type="file" name="images" multiple="" class="inputFileHidden"> 

按下提交按钮后我收到的结果是FileList,如下所示。

stringify 我的File 对象并通过picture_files 键下的FormData 对象发送我的数据。

var data = new FormData()
files = document.getElementById('images_input').files
...
Array.from(files).forEach(file => data.append('picture_files', JSON.stringify(file)))

在我从 request.form 对象请求密钥后,我的 服务器端 遇到的问题是我得到一个空对象

images = request.form['picture_files']
print(images) # result is {}

关于如何安全地将我的 javascript 对象JSON.stringify 发送到我的服务器的任何提示?

【问题讨论】:

  • this 回答你的问题了吗?
  • @gre_gor 足够接近..有趣的方法。不知道文件实际上是指针。感谢您的洞察力

标签: javascript ajax flask


【解决方案1】:

您不能简单地将文件对象转换为 JSON。

可以使用FileReader 读取文件,将其转换为字符串(例如使用Base64 编码),将该字符串放入对象中,然后将对象编码为JSON。这将是复杂且低效的。

将文件对象按原样放入 FormData 会简单得多。

Array.from(files).forEach(file => data.append('picture_files', file))

【讨论】:

  • 通过这样做我无法通过访问request.form['picture_files'] 来检索我的文件,这很有趣..但是如果我保持原样,它就可以工作。这是堆栈跟踪400 Bad Request: The browser (or proxy) sent a request that this server could not understand. KeyError: 'picture_files'
  • 我已将我的代码更改为 images = request.files.getlist('images_input'),它可以工作,但它现在返回一个空列表 []。这是有道理的,因为File 对象不是对象,而是指针。所以我认为这种方法行不通,我的拙见。
猜你喜欢
  • 1970-01-01
  • 2018-10-27
  • 1970-01-01
  • 2015-10-13
  • 1970-01-01
  • 1970-01-01
  • 2017-12-24
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多