我尝试使用JS发送数组文件。我的代码:
var formData = new FormData();
formData.append("files", files);
$.ajax({
url: './upload.php',
method: 'post',
data: formData,
processData: false,
contentType: false,
success: function(response) {
alert('Files uploaded successfully. ');
console.log(response);
},
error: function(jqXHR, textStatus, errorThrown) {
console.log(textStatus, errorThrown);
}
});
在此图像中,您可以看到来自php https://beta.ctrlv.cz/mUwx的响应(红色),还可以看到文件数组数据。我的PHP代码是:
<?php
echo $_POST['files'][0]["name"];
?>
我想使用php脚本进行上传,但是ajax没有发送文件数组,这对于上传非常重要。
答案 0 :(得分:0)
可能将contentType: false,
更改为contentType: "multipart/form-data",
。
取自http://api.jquery.com/jquery.ajax/
contentType (默认:&#39; application / x-www-form-urlencoded; charset = UTF-8&#39;)类型:布尔值或字符串向数据发送时 服务器,使用此内容类型。默认是 &#34;应用程序/ X WWW的窗体-urlencoded; charset = UTF-8&#34;,这很好 大多数情况下。如果您明确地将内容类型传递给$ .ajax(),那么 它总是被发送到服务器(即使没有数据发送)。作为 jQuery 1.6你可以传递false来告诉jQuery不要设置任何内容 类型标题。 注意:W3C XMLHttpRequest规范规定了这一点 charset总是UTF-8;指定另一个字符集不会强制 浏览器更改编码。 注意:对于跨域请求, 将内容类型设置为除以外的任何内容 application / x-www-form-urlencoded , multipart / form-data 或 text / plain 将触发浏览器发送预检OPTIONS请求 服务器
答案 1 :(得分:0)
这是我找到的答案:
var data = new FormData();
jQuery.each(jQuery('#file')[0].files, function(i, file) {
data.append('file-'+i, file);
});
现在你有一个FormData
对象,随时可以与XMLHttpRequest一起发送。
jQuery.ajax({
url: 'php/upload.php',
data: data,
cache: false,
contentType: false,
processData: false,
type: 'POST',
success: function(data){
alert(data);
}
});
来源:https://stackoverflow.com/a/5976031/7282094
希望有所帮助。