Загрузка Rails в AWS с созданием цикла файла .zip.cpgz

Я сталкиваюсь со странной ситуацией, когда некоторые файлы, в частности формат ZIP, при загрузке в AWS в моем приложении Rails повреждены/преобразованы. При загрузке и распаковке они превращаются в формат CPGZ, который распаковывается обратно в ZIP, и делает это бесконечно.

Я не заметил какой-либо закономерности, которая вызывает это, поэтому она носит спорадический характер и может подтвердить, что файлы не повреждены перед загрузкой. Единственный другой issue/topic, который я нашел в этом, относится к PHP, и, кажется, разные обстоятельства.

Я использую AWS SDK для Ruby v1 (не v2 из-за моего Rails) и jQuery-File-Upload. Поскольку некоторые файлы большие, я использую загрузку по частям.

В моем контроллере предварительно подписанный URL-адрес POST создается следующим образом:

S3_BUCKET.presigned_post(key: "uploads/#{SecureRandom.uuid}-${filename}", success_action_status: '201')

И загрузка файла jQuery настроена так (некоторые части удалены для краткости):

this.$el.fileupload({
  fileInput: this.uploadField, // this is an <input type="file">
  url: this.awsURL, // https://BUCKET.s3.amazonaws.com/
  formData: JSON.parse(this.awsData), // {"AWSAccessKeyId":"...","key":"uploads/1234-${filename}","policy":"...","signature":"...","success_action_status":"201"}
  type: 'POST',
  autoUpload: true,
  paramName: 'file',
  dataType: 'XML',
  replaceFileInput: false,
  maxChunkSize: 1000000,
  add: function(event, data) {
    var file = data.files[0];
    var fileType = file.type;

    // Check file type
    if (~'ai sketch psd jpg jpeg png zip ttf woff eot gif'.indexOf(fileType.toLowerCase())) {
      return alert('Sorry, that file type is not supported');
    };

    data.submit();
  },
  progress: function(event, data) {
    // Display progress
  },
  done: function(event, data) {
    var file = data.files[0];
    var fileName = file.name.replace(/ /g,"_");
    var item = _this.uploadedItems[fileName];
    var key = $(data.jqXHR.responseXML).find("Key").text();
    // awsHost = BUCKET.s3.amazonaws.com
    var url = '//' + _this.awsHost + '/' + key;

    // Set form values using above info
  },
  fail: function(event, data) {
    // Alert failure
  }
});

Кто-нибудь испытал это? Это очень расстраивает.


person Jody Heavener    schedule 25.03.2016    source источник
comment
Вы пробовали загружать во временную папку на локальном диске? Если да, происходит ли такая же коррупция?   -  person Anthony E    schedule 30.03.2016
comment
@AnthonyE, как мне протестировать локальную загрузку?   -  person Jody Heavener    schedule 30.03.2016


Ответы (1)


При отправке запроса установите для content-type значение application/zip.

ПОСМОТРЕТЬ https://github.com/aws/aws-sdk-ruby/blob/aws-sdk-v1/lib/aws/s3/presigned_post.rb

person Shishir    schedule 02.04.2016
comment
Спасибо за предложение! Я изменил свой URL-адрес POST на S3_BUCKET.presigned_post(key: "uploads/#{SecureRandom.uuid}-${filename}", content_type: 'application/zip', success_action_status: '201'), но, к сожалению, я все еще получаю файл CPGZ при загрузке. - person Jody Heavener; 02.04.2016
comment
Это работает, если вы не разбиваете? или вы столкнулись с той же проблемой. пытаясь изолировать, что вызывает повреждение данных и когда? - person Shishir; 09.04.2016
comment
ваше предложение оказалось исправлением здесь! У меня не правильно настроена разбивка. Не стесняйтесь создавать официальный ответ, и я приму его. - person Jody Heavener; 21.06.2016