私のフォームでは、複数のファイルのアップロードがあり、FormData
を使用して1つのファイルのみがアップロードされていますが、アップロードするファイルを複数選択していますが、以下はコードです
[〜#〜] html [〜#〜]
<form name="uploadImages" method="post" enctype="multipart/form-data">
<input type="file" name="photo[]" value="">
<input type="file" name="photo[]" value="">
<input type="file" name="photo[]" value="">
</form>
[〜#〜] js [〜#〜]
var ajaxData = new FormData();
ajaxData.append( 'action','uploadImages');
jQuery.each($("input[name^='photo']")[0].files, function(i, file) {
ajaxData.append('photo['+i+']', file);
});
$.ajax({
url: URL,
data: ajaxData,
cache: false,
contentType: false,
processData: false,
type: 'POST',
dataType:'json',
success: function(data) {
if (data.status == 'success') {
location.reload();
}
}
});
私はサーバーでPHP
を使用しており、HTML attribute name
i、e photo
ファイルを保存できるのは私だけです。動的ファイル名は機能しません。
Javascriptにエラーがあります:1つの入力のファイルに対してのみ反復しているので、これを見てください
var ajaxData = new FormData();
ajaxData.append( 'action','uploadImages');
$.each($("input[type=file]"), function(i, obj) {
$.each(obj.files,function(j, file){
ajaxData.append('photo['+j+']', file);
})
});
jsfiddle の例
フロントエンドで
<form name="uploadImages" method="post" enctype="multipart/form-data">
<input type="file" name="photo[]" value=""/>
<input type="file" name="photo[]" value=""/>
<input type="file" name="photo[]" value=""/>
<button id="btn">btn</button>
</form>
<script>
$(function(){
var ajaxData = new FormData();
ajaxData.append( 'action','uploadImages');
$.each($("input[type=file]"), function(i, obj) {
$.each(obj.files,function(j, file){
ajaxData.append('photo['+j+']', file);
$('#btn').on('click',function(){
$.ajax({
url:'https://stores-govan.c9users.io/test',
type:"POST",
data:ajaxData,
processData:false,
contentType:false,
success:function(){
},
crossDomain:true
})
})
})
});
})
</script>
バックエンド(nodejs)でこれを追加します(multerを使用)
var multer=require('multer')
app.post('/test',upload.array('photo[]',6),function(req ,res,next){
var images=[]
if(req.files){
for(var i=0;i<req.files.length;i++){
images[i]=req.files[i].filename }
}
console.log(images)
})
<input type="file" name="Attachment[]" class="form-control TheFiles" />
前の回答には次のコードで修正された小さなエラーがあり、ajaxを介して複数のファイルを送信するように機能します:
var formData = new FormData();
$.each($(".TheFiles"), function (i, obj) {
$.each(obj.files, function (j, file) {
formData.append('Attachment[' + i + ']', file); // is the var i against the var j, because the i is incremental the j is ever 0
});
});
formData.append('Destination', Destination); //add more variables that you need
formData.append('ReplyTo', ReplyTo);//add more variables that you need
formData.append('Body', Body);//add more variables that you need
オプションで、あなただけのために私のajax設定を見ることができます
$.ajax({
url: 'YourUrl',
type: 'POST',
data: formData,
async: false,
success: function (data) {
location.reload();
},
complete: function () {
$(Here).text('Enviado com sucesso');
},
error: function (err) {
alert("Não deixe nenhum campo vazio");
},
cache: false,
contentType: false,
processData: false
});
これはうまくいきます:
var data = new FormData();
for( var i = 0, len = document.getElementById('attachment').files.length; i < len; i++ ){
data.append( "files" + i, document.getElementById('attachment').files[i] );
}
これらの答えは機能しません。
var ajaxData = new FormData();
ajaxData.append( 'action','uploadImages');
$.each($("input[type=file]"), function(i, obj) {
$.each(obj.files,function(j,file){
ajaxData.append('photo['+j+']', file);//i had to change "i" by "j"
})
});