【问题标题】:JQuery AJAX sending files array from formJQuery AJAX从表单发送文件数组
【发布时间】:2012-02-17 23:43:56
【问题描述】:

我在某处获得了此代码,无需刷新浏览器即可上传图片。但是我不喜欢上传文件,所以我决定使用以前使用的旧文件。问题是它从 javascript 文件发送一个数组而不是一个字符串(它打算发送多个文件而不是只发送一个文件)。下面是创建数组的代码:

input.addEventListener("change", function (evt) {
    document.getElementById("response").innerHTML = "Loading . . ."

    var i = 0, len = this.files.length, img, reader, file;

    for ( ; i < len; i++ ) {
        file = this.files[i];
            if (formdata) {
                formdata.append("uploaded_file[]", file);
    }   }   }

    if (formdata) {
        $.ajax({
            url: "img_upload.php",
            type: "POST",
            data: formdata,
            processData: false,
            contentType: false
        }).done(function (res) {
                            /* *** show uploaded item *** */
                            /* *** show response *** */
            });
    }

我的Javascript知识真的很薄弱,我不知道如何修改此代码以发送上传的文件本身而不是数组。

我独立尝试了这些,但没有一个起作用(send_img 是表单名称/id):

formdata = document.send_img.uploaded_file.value;
formdata = document.getElementById("uploaded_file");
formdata = new formdata ($('#send_img'));
formData = $('#send_img').serialize();
formdata.replaceWith("uploaded_file[]", file);

我还尝试消除 for 以使用相同的键 (0),但它不起作用。 img_upload.php 的精简代码是:

$fileName = $target . $_FILES["uploaded_file"]["name"];
$fileTmpLoc = $_FILES["uploaded_file"]["tmp_name"];
$fileName = $new_name .  "."  . $fileExt;
move_uploaded_file($fileTmpLoc, "images/images/temp/$fileName");

如何仅在一个字符串中发送上传的文件(或标题或应发送的任何内容),并且在添加第二个文件的情况下,替换第一个文件而不是在数组中创建第二个值?

【问题讨论】:

    标签: jquery file-upload ajax-forms


    【解决方案1】:

    问题不是你的逻辑,问题是无法通过ajax上传文件。

    但也许你会问,别人是怎么做的?好吧,尝试一个表单插件(另一个适用于 jQuery 的 .js)

    我为您找到了这个,它使用“提交”方法工作,但也许您可以在输入更改时进行提交或使用 javascript 操作找到其他类型的解决方案。

    检查这个:http://www.miguelmanchego.com/2009/subir-archivos-usando-ajax-jquery/

    网站是西班牙语,但如果您需要,可以将其翻译成英语。该链接还包括一个实时示例和源代码下载。

    问候。

    【讨论】:

      【解决方案2】:

      下面是我的ajax设置,可以上传文件

      method: "POST",
              url: url,
              headers: { 'Content-Type': undefined },
              transformRequest: function (data, headersGetter) {
                  var formData = new FormData();
                  angular.forEach(data, function (value, key) {
                      if (Array.isArray(value)) {
                          // To save array of items
                          angular.forEach(value, function (value1, key1) {
                              if (value1.constructor.name != "File") {
                                  angular.forEach(value1, function (value2, key2) {
                                      formData.append(key + '[' + key1 + '].' + key2, value2);
                                  });
                              }
                          });
                      } else {
                          formData.append(key, value);
                      }
                  });
      
                  return formData;
              },
              enctype: 'multipart/form-data',
              dataType: 'json',
              traditional: true,
              data: data,
              cache: false,
              processData: false,
              contentType: false
      

      【讨论】:

        猜你喜欢
        • 2023-04-07
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-10-11
        • 1970-01-01
        • 2015-05-22
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多