formdata只发送第一个名字object
Formdata send only the name of the first object
我尝试异步上传文件,但遇到无法解决的问题。
我有一个没有表单元素的输入字段,它包含原始数据和文件。当我尝试上传时,我猜第一个表单数据文件 object 在服务器端失败了。 $_FILES 变量仅包含第一个文件的名称,但在第一个文件之后一切正常。 Html:
<input class="form-control fileInput" id="applInputIdentityFile" type="file" accept=".pdf,.jpg,.png,.gif" style="display: none">
JS:
$('.fileInput').on('change',function(){
applToSend.arrayToSend = new FormData();
$('.fileInput').each(function(){
var fileName = $(this).val().replace(/^.*\/, "");
if(fileName){
$("#" + $(this).attr("id") + "Name").html(fileName);
$(this)[0].files[0].descr = $(this).attr("id");
applToSend.arrayToSend.append($(this).attr("id"), $(this)[0].files[0]);
}
});
});
前端 object 包含正确的值,ajax header 对我来说似乎很好:
------WebKitFormBoundaryDcqJbGjmdx2dg3q6
Content-Disposition: form-data; name="applInputIdentityFile"; filename="20200430_115117.jpg"
Content-Type: image/jpeg
------WebKitFormBoundaryDcqJbGjmdx2dg3q6
Content-Disposition: form-data; name="applInputProdCertFile"; filename="20200430_115117_resized.jpg"
Content-Type: image/jpeg
Ajax本身:
$.ajax({
url: '/application/addAppl',
type: 'POST',
data: applToSend.arrayToSend,
timeout: 30000,
processData: false,
contentType: false,
cache: false,
enctype: 'multipart/form-data',
})
但是第一个文件总是失败,无论我尝试上传多少文件或使用哪个输入、哪个文件、哪个扩展名。
服务器端只有这几行,其他都注释掉了(我用的是MVC,所以是几百行代码后的请求模型):
public function addAppl($data){
foreach($_FILES as $key=>$value){
foreach($value as $kkey=>$vvalue){
echo "<br>".$key.": ".$kkey." :".$vvalue;
}
}
}
applInputIdentityFile: name :20200430_115117.jpg
applInputIdentityFile: type :
applInputIdentityFile: tmp_name :
applInputIdentityFile: error :1
applInputIdentityFile: size :0
applInputProdCertFile: name :20200430_115117_resized.jpg
applInputProdCertFile: type :image/jpeg
applInputProdCertFile: tmp_name :/tmp/phpLoBwTl
applInputProdCertFile: error :0
applInputProdCertFile: size :382022
你能帮我解决这个问题吗?
您必须编辑 upload_max_filesize
你可以编辑htaccess文件,添加这一行
php_value upload_max_filesize 256M //256M more or less
或编辑 php.ini 文件,找到并更改它:
upload_max_filesize = 256M //256M more or less
我尝试异步上传文件,但遇到无法解决的问题。 我有一个没有表单元素的输入字段,它包含原始数据和文件。当我尝试上传时,我猜第一个表单数据文件 object 在服务器端失败了。 $_FILES 变量仅包含第一个文件的名称,但在第一个文件之后一切正常。 Html:
<input class="form-control fileInput" id="applInputIdentityFile" type="file" accept=".pdf,.jpg,.png,.gif" style="display: none">
JS:
$('.fileInput').on('change',function(){
applToSend.arrayToSend = new FormData();
$('.fileInput').each(function(){
var fileName = $(this).val().replace(/^.*\/, "");
if(fileName){
$("#" + $(this).attr("id") + "Name").html(fileName);
$(this)[0].files[0].descr = $(this).attr("id");
applToSend.arrayToSend.append($(this).attr("id"), $(this)[0].files[0]);
}
});
});
前端 object 包含正确的值,ajax header 对我来说似乎很好:
------WebKitFormBoundaryDcqJbGjmdx2dg3q6
Content-Disposition: form-data; name="applInputIdentityFile"; filename="20200430_115117.jpg"
Content-Type: image/jpeg
------WebKitFormBoundaryDcqJbGjmdx2dg3q6
Content-Disposition: form-data; name="applInputProdCertFile"; filename="20200430_115117_resized.jpg"
Content-Type: image/jpeg
Ajax本身:
$.ajax({
url: '/application/addAppl',
type: 'POST',
data: applToSend.arrayToSend,
timeout: 30000,
processData: false,
contentType: false,
cache: false,
enctype: 'multipart/form-data',
})
但是第一个文件总是失败,无论我尝试上传多少文件或使用哪个输入、哪个文件、哪个扩展名。 服务器端只有这几行,其他都注释掉了(我用的是MVC,所以是几百行代码后的请求模型):
public function addAppl($data){
foreach($_FILES as $key=>$value){
foreach($value as $kkey=>$vvalue){
echo "<br>".$key.": ".$kkey." :".$vvalue;
}
}
}
applInputIdentityFile: name :20200430_115117.jpg
applInputIdentityFile: type :
applInputIdentityFile: tmp_name :
applInputIdentityFile: error :1
applInputIdentityFile: size :0
applInputProdCertFile: name :20200430_115117_resized.jpg
applInputProdCertFile: type :image/jpeg
applInputProdCertFile: tmp_name :/tmp/phpLoBwTl
applInputProdCertFile: error :0
applInputProdCertFile: size :382022
你能帮我解决这个问题吗?
您必须编辑 upload_max_filesize
你可以编辑htaccess文件,添加这一行
php_value upload_max_filesize 256M //256M more or less
或编辑 php.ini 文件,找到并更改它:
upload_max_filesize = 256M //256M more or less