jQueryFileUpload - S3 - Ошибка результата загрузки пустого файла - PullRequest
0 голосов
/ 04 марта 2020

Я пытаюсь настроить прямую загрузку S3 с помощью jQuery библиотеки загрузки файлов (https://github.com/blueimp/jQuery-File-Upload/wiki/Upload-directly-to-S3). Я использую их последнюю версию, и вот как я инициализирую плагин:

$(function() {
  $("#s3-uploader").data(
    "key",
    $("#s3-uploader")
      .find("input[name='key']")
      .val()
  );
  var settings = { path: "" };
  $("#s3-uploader").fileupload({
    limitConcurrentUploads: 1,
    acceptFileTypes: /(\.|\/)(gif|jpe?g|png)$/i,
    dataType: "xml",
    paramName: "file",
    formData: function(form) {
      var data, fileType, key;
      data = form.serializeArray();
      fileType = "";
      if ("type" in this.files[0]) {
        fileType = this.files[0].type;
      }
      data.push({
        name: "content-type",
        value: fileType
      });
      key = $("#s3-uploader")
        .data("key")
        .replace("{timestamp}", new Date().getTime())
        .replace("{unique_id}", this.files[0].unique_id);
      data[1].value = settings.path + key;
      if (!("FormData" in window)) {
        $("#s3-uploader")
          .find("input[name='key']")
          .val(settings.path + key);
      }
      return data;
    }
  });
});

А вот дополнительные данные формы, которые я отправляю для удовлетворения требований S3:


<input name="utf8" type="hidden" value="✓">
<input type="hidden" name="key" id="key" value="uploads/{timestamp}-{unique_id}-4c9ded19e2649ab92c6d37e6e30e679a/${filename}">
<input type="hidden" name="acl" id="acl" value="public-read">
<input type="hidden" name="AWSAccessKeyId" id="AWSAccessKeyId" value="<KEY>">
<input type="hidden" name="policy" id="policy" value="<POLICY>">
<input type="hidden" name="signature" id="signature" value="JOK4zvx/jAJbUXHzWGGUJ8pxk5E=">
<input type="hidden" name="success_action_status" id="success_action_status" value="201">
<input type="hidden" name="X-Requested-With" id="X-Requested-With" value="xhr">

Загрузка происходит правильно, и файл доступен на S3, но затем загрузка выдает эту ошибку: Empty file upload result

enter image description here

Ответ от S3 такое XML документ:

<PostResponse><Location>htps://my-bucket.s3-accelerate.amazonaws.com/uploads%2F1583345823865-undefined-4c9ded19e2649ab92c6d37e6e30e679a%2F_102035t8.JPG</Location><Bucket>my-bucket</Bucket><Key>uploads/1583345823865-undefined-4c9ded19e2649ab92c6d37e6e30e679a/_1020358.JPG</Key><ETag>"c77b13bec857d9470f360b363f7fb045"</ETag></PostResponse>

Как мне сделать jQuery Загрузка файла обработать этот ответ от S3 и посчитать его успешным и проанализировать URL S3? Спасибо!

1 Ответ

0 голосов
/ 05 марта 2020

Похоже, jQuery Загрузка файла сама по себе не справляется с этой ситуацией. то есть он не анализирует документ XML, возвращенный S3. Я позаимствовал код из гема s3_direct_upload, чтобы выполнить работу. Вы можете найти его здесь: https://github.com/waynehoover/s3_direct_upload/blob/master/app/assets/javascripts/s3_direct_upload.js.coffee#L72

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...