使用Ajax的PUT方法将文件PUT致Aws S3或Ceph RGW

在为吉致汽车金融服务的过程中,对方的外包人员遇到了无法通过Ajax PUT文件到Ceph RGW的情况,经过分析是他的data指向了一个FormData对象,将文件内容append到了FormData中,Key值为file,
如下:
var formData = new FormData();
formData.append(“file”, document.getElementById(“file1”).files[0]);

这样RGW是无法解析的 ajax的data项应该直接为文件内容,故而修改如下:

$.ajax({
      type: 'PUT',
      url: "<YOUR_PRE_SIGNED_UPLOAD_URL_HERE>",
      contentType: 'binary/octet-stream',//如不确认类型,可以False,填写了则必须与服务端相匹配
      processData: false, //关键
      data: $("#file1").get()[0].files[0],
    })
    .success(function() {
      alert('File uploaded');
    })
    .error(function() {
      alert('File NOT uploaded');
      console.log( arguments);
});

调试成功~