使用Axios的S3存储桶仅在IE11中提供403

问题描述 投票:1回答:1

我有一个脚本,我们试图用预先签名的URL将文件提交到S3存储桶。在Chrome,Firefox,Edge和Safari中,这似乎运行良好,但是在Internet Explorer 11中。]

import axios from 'axios';
import { urls } from './Urls';
import { getAccountInfo } from './GigyaService';
import { getAWSHeaders } from '../helpers/getAWSHeaders';

export async function receiptUpload(file) {
  const account = await getAccountInfo();
  const headers = getAWSHeaders(account);
  const presignUrl = await axios.post(urls.fileUpload.presignUpload, {file_name: file.name}, {headers}).then(res => res.data);
  const fileUpload = presignUrl && presignUrl.presignUrl && await axios.put(presignUrl.presignUrl, file, {
    headers: {
      'Content-Type': 'application/x-www-form-urlencoded'
    }
  }).then(res => res.status === 200);
  const fileId = fileUpload && await axios.post(urls.fileUpload.receiptUpload, {file_name: file.name}, {headers}).then(res => res.data);
  const receiptSubmit = fileId && await axios.post(urls.fileUpload.receiptSubmit, {
    file_id: fileId.file_id
  }, {headers}).then(res => res.data);
  return receiptSubmit;
}

我的第一个倾向是标题未正确发送,但是我认为这也会导致其他浏览器失败。同样不幸的是,IE11并未真正为您提供有关所产生的请求标头是什么的非常详细的信息。因此,在Chrome中,标题看起来像这样...

PUT /228ea8e2445144cfa89b8dbbc2d05e38/237-536x354.jpg?....
Host: test-images-upload.s3.amazonaws.com
Connection: keep-alive
Content-Length: 35096
Accept: application/json, text/plain, */*
Origin: http://localhost:4502
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.130 Safari/537.36
DNT: 1
Content-Type: application/x-www-form-urlencoded
Sec-Fetch-Site: cross-site
Sec-Fetch-Mode: cors
Referer: http://localhost:4502/content/loyalty/en/account/earn-points.html?wcmmode=disabled
Accept-Encoding: gzip, deflate, br
Accept-Language: en-US,en;q=0.9

并且在IE中将标头报告为...

Accept: */*
Accept-Encoding: gzip, deflate
Access-Control-Request-Headers: accept, content-type
Access-Control-Request-Method: PUT
Cache-Control: no-cache
Connection: Keep-Alive
Content-Length: 0
Host: test-images-upload.s3.amazonaws.com
Origin: http://10.xxx.xx.xx:xxxx
User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64; Trident/7.0; rv:11.0) like Gecko

在这一点上,我完全为问题可能感到困惑!

上面的代码似乎可以从Babel / Weback编译为以下代码:>

function _receiptUpload() {
  _receiptUpload = _babel_runtime_helpers_asyncToGenerator__WEBPACK_IMPORTED_MODULE_1___default()(
  /*#__PURE__*/
  _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_0___default.a.mark(function _callee(file) {
    var account, headers, presignUrl, fileUpload, fileId, receiptSubmit;
    return _babel_runtime_regenerator__WEBPACK_IMPORTED_MODULE_0___default.a.wrap(function _callee$(_context) {
      while (1) {
        switch (_context.prev = _context.next) {
          case 0:
            console.log('test');
            _context.next = 3;
            return Object(_GigyaService__WEBPACK_IMPORTED_MODULE_4__["getAccountInfo"])();

          case 3:
            account = _context.sent;
            headers = Object(_helpers_getAWSHeaders__WEBPACK_IMPORTED_MODULE_5__["getAWSHeaders"])(account);
            _context.next = 7;
            return axios__WEBPACK_IMPORTED_MODULE_2___default.a.post(_Urls__WEBPACK_IMPORTED_MODULE_3__["urls"].fileUpload.presignUpload, {
              file_name: file.name
            }, {
              headers: headers
            }).then(function (res) {
              return res.data;
            });

          case 7:
            presignUrl = _context.sent;
            _context.t0 = presignUrl && presignUrl.presignUrl;

            if (!_context.t0) {
              _context.next = 13;
              break;
            }

            _context.next = 12;
            return axios__WEBPACK_IMPORTED_MODULE_2___default.a.put(presignUrl.presignUrl, file, {
              headers: {
                'Content-Type': 'application/x-www-form-urlencoded'
              }
            }).then(function (res) {
              return res.status === 200;
            });

          case 12:
            _context.t0 = _context.sent;

          case 13:
            fileUpload = _context.t0;
            _context.t1 = fileUpload;

            if (!_context.t1) {
              _context.next = 19;
              break;
            }

            _context.next = 18;
            return axios__WEBPACK_IMPORTED_MODULE_2___default.a.post(_Urls__WEBPACK_IMPORTED_MODULE_3__["urls"].fileUpload.receiptUpload, {
              file_name: file.name
            }, {
              headers: headers
            }).then(function (res) {
              return res.data;
            });

          case 18:
            _context.t1 = _context.sent;

          case 19:
            fileId = _context.t1;
            _context.t2 = fileId;

            if (!_context.t2) {
              _context.next = 25;
              break;
            }

            _context.next = 24;
            return axios__WEBPACK_IMPORTED_MODULE_2___default.a.post(_Urls__WEBPACK_IMPORTED_MODULE_3__["urls"].fileUpload.receiptSubmit, {
              file_id: fileId.file_id
            }, {
              headers: headers
            }).then(function (res) {
              return res.data;
            });

          case 24:
            _context.t2 = _context.sent;

          case 25:
            receiptSubmit = _context.t2;
            return _context.abrupt("return", receiptSubmit);

          case 27:
          case "end":
            return _context.stop();
        }
      }
    }, _callee);
  }));
  return _receiptUpload.apply(this, arguments);
}

我有一个脚本,我们试图用预先签名的URL将文件提交到S3存储桶。在Chrome,Firefox,Edge和Safari中,这似乎运行良好,但是在Internet Explorer 11中。import ...

javascript internet-explorer amazon-s3 axios internet-explorer-11
1个回答
0
投票

Internet Explorer,只是不断赠送的礼物。碰到了这个issue and solution,看起来非常相似。可能重复吗?

© www.soinside.com 2019 - 2024. All rights reserved.