【发布时间】:2014-06-03 07:47:53
【问题描述】:
可以这样做吗?更详细:
- 我有一个从输入元素中检索到的文件对象
- 我想把这个上传到服务器,连同几个 具有相关数据(文件名等)的键/值对
- 我想用 Ajax 来做这件事,因为系统中的其他东西 使用 Ajax,我已经标准化了基于 服务器响应
- 我想用 URL 编码来做这个,因为文件很小,而且
服务器没有实现
multipart/form-data
我尝试了几种不同的方法,但没有一种是完全正确的。此代码“按原样”发送文件数据(即有效的原始二进制文件,而不是作为 URL 编码的键值对):
var files = document.getElementById('idUploadBrowseInput').files;
var fdata = files[0];
var jqxhr = $.ajax({
type : "POST",
url : "/cgi-bin/upload_cgi",
timeout : 20000,
processData : false,
data : fdata
}).always(...etc)
原始二进制文件可以,但我还需要其他键值对,而且似乎无法同时发送这些。
如果我将data : fdata 行更改为data : {fdata : fdata},那么POST 数据将变为[object Object](在FF 上)。如果我删除了processData:false,那么我会在 jQuery 中得到一个异常。
FileReader API 有一些我想我应该使用的 readAs 方法 - 大概,如果我将文件内容读入 var,那么我可以将 var 作为数据对象的一部分发送,它应该一切正常。但是,这是冗长的,我只是想先检查一下是否没有更直接的方法。
请注意,this post 没有回答问题。
【问题讨论】:
-
不确定,请说明要求?谢谢
-
简而言之,在使用 Ajax 时,可以将 URL 编码的文件 'object' 作为键值对与其他键值对一起发送吗?
-
如果可以的话,可以发
cgi件吗?请澄清object?试过fileobject作为base64字符串?或encodeURIComponent(file)?试试Blob和FileReder?见developer.mozilla.org/en-US/docs/Web/API/Blobdeveloper.mozilla.org/en-US/docs/Web/API/Filestackoverflow.com/questions/23140007/…
标签: jquery ajax html filereader