我想使用json上传二进制文件。 我选择Json是因为使用该文件我还想发送其他信息。使用Json发布文件
我要通过这样做 -
- 选择在文件输入标签的文件。
- 使用HTML5文件读取器Api首先读取文件。
- 将文件内容转换为base64。
- 将base64内容添加到数据uri格式的JS对象中。
- 将JS对象转换为json并将其发布到服务器。
我想知道这是否是实现我目标的唯一合法方式?另外,如果有一个插件已经可以在某个地方给我这种能力?
我想使用json上传二进制文件。 我选择Json是因为使用该文件我还想发送其他信息。使用Json发布文件
我要通过这样做 -
我想知道这是否是实现我目标的唯一合法方式?另外,如果有一个插件已经可以在某个地方给我这种能力?
不,这不是唯一的方法 - 其他方法之一就是提交一个表单,其中包含一个文件。这种形式使用multipart/form-data
内容类型。
参见W3C documentation on the subject:
内容类型“
application/x-www-form-urlencode
d”是低效的,用于发送大量的二进制数据或包含非ASCII字符的文本。内容类型“
multipart/form-data
”应该用于提交包含文件,非ASCII数据和二进制数据的表单。
因此,没有必要重新发明轮子 - 浏览器已经支持以简单的方式发送文件和附加信息。您只需创建一个表单,用户可以输入数据并选择文件,然后将所有文件发送到服务器,内容类型为multipart/form-data
,您的Web框架应该能够理解它处理文件和文本数据。
如果您需要发布其他数据,为什么不使用隐藏的输入字段?它更容易实现,因为您不需要混淆文件读取器(兼容性?),Base64编码数据或JSON,只需从POST中获取值即可。 – Cerbrus
我需要使用Ajax。表单提交将不是一个优雅的解决方案。如果我能成功,我会把它转换成一个插件。这样人们可以轻松地上传带有附加数据的文件。 – Tushar
@TusharMathur:如果您坚持使用AJAX,即使您使用HTML5 API,仍然可以坚持已建立的解决方案(例如多部分表单数据)。那里有解决方案使用Flash功能等,但如果你可以使用HTML5,那么它很好。 – Tadeck