ruby-on-rails - Rails 上传到 AWS 创建 .zip.cpgz 文件循环

标签 ruby-on-rails amazon-s3 zip jquery-file-upload aws-sdk

我遇到了一个奇怪的情况,在我的 Rails 应用程序中上传到 AWS 时,某些文件(特别是 ZIP 格式)被损坏/转换。下载和解压后,它们会变成 CPGZ 格式,然后再解压回 ZIP,并无限执行此操作。

我没有注意到导致这种情况的模式,所以它看起来是零星的,并且可以在上传之前确认文件没有损坏。唯一的其他issue/topic我发现这与PHP有关,并且似乎情况不同。

我正在使用 AWS SDK for Ruby v1 (不是 v2,因为我的 Rails 版本)和 jQuery-File-Upload .由于一些文件很大,我使用分块上传。

在我的 Controller 中,预签名的 POST URL 是这样创建的:

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

jQuery File Upload 设置如下(为简洁起见,删除了一些部分):
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
  }
});

有没有人经历过这个?这很令人沮丧。

最佳答案

套装内容类型应用程序/zip 当您发送请求时。

https://github.com/aws/aws-sdk-ruby/blob/aws-sdk-v1/lib/aws/s3/presigned_post.rb

关于ruby-on-rails - Rails 上传到 AWS 创建 .zip.cpgz 文件循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36228357/

相关文章:

ruby-on-rails - 设计身份验证 token

amazon-s3 - 通过 Web 浏览器访问存储在 Amazon S3 上的文件

java - 将字节数组写入 ZipArchiveOutputStream

github - 设置可从 GitHub 下载的 ZIP 名称或在 GitHub 上注册 Google Transit 项目的其他方式

amazon-web-services - 通过 AWS QuickSight 使用 AWS Athena 的查询结果是否存储在 S3 中?

Java NIO Zip 文件系统相当于 java.util.zip.ZipEntry 中的 setMethod()

ruby-on-rails - 使用从客户端移动应用程序收到的访问 token 访问 FB Graph API

javascript - ruby 数组到 javascript - Rails

ruby-on-rails - 在 rails 的初始值设定项中,在哪里为这个文件编写测试用例?

python - Airflow:如何将 PDF 文件从 S3 存储桶下载到 Airflow