使用预签名 URL 上传可以在邮递员中工作,但在获取时失败并出现 403

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

在React Native 0.70应用程序中,fetch用于将jpg图片上传到OSS。这是代码:

import ReactNativeBlobUtil from "react-native-blob-util"; //v0.19
fileData = await ReactNativeBlobUtil.fs.readFile(filePath);
// fileData is in binary format. the filePath is something similar to after image picker:
// file:///data/user/0/com.xyz_app6/cache/rn_image_picker_lib_temp_97c732b7-48a1-469b-8df1-d42054e5e070.jpg
response = await fetch(preSignedUrl, {
  method: "PUT",
  body: fileData,
});

上传失败,出现 403:

在 uploadtooss 中回复:

{
  _bodyBlob: {
    _data: {
      __collector: [Object],
      blobId: "56f0bef0-11bb-4b5b-a072-dc70849f0fb6",
      offset: 0,
      size: 959,
    },
  },
  _bodyInit: {
    _data: {
      __collector: [Object],
      blobId: "56f0bef0-11bb-4b5b-a072-dc70849f0fb6",
      offset: 0,
      size: 959,
    },
  },
  bodyUsed: false,
  headers: {
    map: {
      connection: "keep-alive",
      "content-length": "959",
      "content-type": "application/xml",
      date: "Fri, 16 Feb 2024 00:36:02 GMT",
      server: "AliyunOSS",
      "x-oss-ec": "0002-00000040",
      "x-oss-request-id": "65CEADF19BB920313243F0CF",
      "x-oss-server-time": "77",
    },
  },
  ok: false,
  status: 403,
  statusText: "",
  type: "default",
  url: "https://xxxx.oss-cn-hangzhou.aliyuncs.com/22790/fWstDM-1000000022.jpg?OSSAccessKeyId=LTAI5t5axvqwo2qGxxxxxxxx&Expires=1708047351&Signature=haslIgyue9yAG71NG9gkomHqxxxxxxxxxx",
};

也尝试了

base64
格式,错误是一样的:

fileData = await ReactNativeBlobUtil.fs.readFile(filePath, 'base64');

但是,当将相同的预签名 URL 粘贴到 postman 中时,取消选中标头中的 Content-Type,并为正文选择二进制并选择 jpg 文件,发送成功。抓取过程中缺少什么?

javascript react-native blob fetch-api
1个回答
0
投票

在安全性方面,Postman 通常使用自签名证书等来“作弊”一点,使 Postman 在您启动项目时更容易使用。但这并不是实际测试安全相关功能(例如自签名 URL)的好用例。

我真的会检查一下应用程序代码是否存在潜在问题、CORS 问题等,并且不相信 Postman 一切都快正常了。

抱歉我无法提供更多细节...:(

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