duansha6410 2016-12-06 13:01
浏览 58

如何使用FormData()jquery提交动态文件类型并在php中接收它

For single file upload it's working fine, see below example

<input name="audio_preview" id="audio_preview" type="file">

var formData = new FormData();
var audio_preview = document.getElementById('audio_preview');
var audio_preview_file = audio_preview.files[0];
formData.append('audio_preview', audio_preview_file);

Now receive it in php

[audio_preview] => Array
     (
       [name] => bawa_sus-bawa_sus-10511_hifi.mp3
       [type] => audio/mpeg
       [tmp_name] => /customers/4/6/d/domain.com/tmp/phpUTkVgr
       [error] => 0
       [size] => 116737
      )

Above code is working fine, but now i want to submit dynamic file input field, check below code

<input name="download_files[]" type="file">
<input name="download_files[]" type="file">
<input name="download_files[]" type="file">
<input name="download_files[]" type="file">

<script>
var allFiles = jQuery("input[name='download_files[]']");
 jQuery.each(allFiles,function(index, value){
    formData.append('download_files[]', value.files[0]);
 });
</script>

It sends below array

[download_files] => Array
        (
            [name] => Array
                (
                    [0] => ajax-loader.gif
                    [1] => already-subscribed-help.gif
                )

            [type] => Array
                (
                    [0] => image/gif
                    [1] => image/gif
                )

            [tmp_name] => Array
                (
                    [0] => /customers/4/6/d/domain.com/tmp/phpnd9czo
                    [1] => /customers/4/6/d/domain.com/tmp/phpNC4BlI
                )

            [error] => Array
                (
                    [0] => 0
                    [1] => 0
                )

            [size] => Array
                (
                    [0] => 19110
                    [1] => 7805
                )
          )
 )

AJAX

$.ajax({
            type: 'post',
            url: $form.attr('action'),
            data: formData,
            processData: false, // Don't process the files
            contentType: false,
            success: function(s) {
                alert('files uploaded');
                jQuery( '.wordpress-ajax-form' ).each(function(){
                    this.reset();
                });
                jQuery("#sucess").show().delay(4000).fadeOut();
            },
            error: function(xhr) {
                alert("An error occured files uploaded: " + xhr.status + " " + xhr.statusText);
            }
        });

How to submit files with FormData() using jQuery.

  • 写回答

1条回答 默认 最新

  • dq05304 2016-12-07 09:16
    关注

    Replace jQuery code inside script tag above like

    <script>
     jQuery.each($('input[name^="download_files"]')[0].files, function(i, file) {
         formData.append('download_files[]', file);
     });
    </script>
    
    评论

报告相同问题?

悬赏问题

  • ¥30 这是哪个作者做的宝宝起名网站
  • ¥60 版本过低apk如何修改可以兼容新的安卓系统
  • ¥25 由IPR导致的DRIVER_POWER_STATE_FAILURE蓝屏
  • ¥50 有数据,怎么建立模型求影响全要素生产率的因素
  • ¥50 有数据,怎么用matlab求全要素生产率
  • ¥15 TI的insta-spin例程
  • ¥15 完成下列问题完成下列问题
  • ¥15 C#算法问题, 不知道怎么处理这个数据的转换
  • ¥15 YoloV5 第三方库的版本对照问题
  • ¥15 请完成下列相关问题!