当前位置: 首页 > 知识库问答 >
问题:

S3 签名网址不适用于 ajax

夹谷成龙
2023-03-14

我正在尝试使用预先签名的URL将文件直接上传到S3,但无法让它工作,检查了所有相关帖子,但找不到任何解决方案。我能够在另一个项目中通过角上传,下面的代码正在工作。

const req = new HttpRequest('PUT', preSignedUrl, file, {
    reportProgress: true
});

$this._http.request(req).subscribe(e => {
    if (e.type === HttpEventType.UploadProgress) {
        ...
    } else if (e instanceof HttpResponse) {
        ...
    }
})

然而,现在我试图用Ajax获得相同的输出,但我得到了403。对飞行前请求的响应未通过访问控制检查:请求的资源上不存在“访问控制允许来源”标头。

这是不起作用的代码:

$.ajax({
    type: 'PUT',
    url: preSignedUrl,
    // Content type must much with the parameter you signed your URL with
    headers: {
        "Content-Type": file.type,
        'x-amz-acl': 'public-read'
    },
    // this flag is important, if not set, it will try to send data as a form
    processData: false,
    // the actual file is sent raw
    data: file
})
    .success(function () {
        alert('File uploaded');
    })
    .error(function () {
        alert('File NOT uploaded');
        console.log(arguments);
    });

请帮帮忙

共有1个答案

袁琪
2023-03-14

请检查:上传一个包含$的文件。带有预签名url的AWS S3 Ajax

 $.ajax({
      type: 'PUT',
      url: "<YOUR_PRE_SIGNED_UPLOAD_URL_HERE>",
      // Content type must much with the parameter you signed your URL with
      contentType: 'binary/octet-stream',
      // this flag is important, if not set, it will try to send data as a form
      processData: false,
      // the actual file is sent raw
      data: theFormFile
    })
    .success(function() {
      alert('File uploaded');
    })
    .error(function() {
      alert('File NOT uploaded');
      console.log( arguments);
    });

在浏览器中配置CORS:链接

<CORSConfiguration xmlns="http://s3.amazonaws.com/doc/2006-03-01/">
  <CORSRule>
    <AllowedOrigin>*</AllowedOrigin>
    <AllowedMethod>PUT</AllowedMethod>
    <AllowedHeader>*</AllowedHeader>
    <ExposeHeader>ETag</ExposeHeader>
  </CORSRule>
</CORSConfiguration>
 类似资料:
  • 我有一个场景,我的图像使用预先签名的URL上传到S3存储桶上。在高负载情况下,我想让我的用户名知道延迟并让他等待。过期后,我们会得到HTTP状态代码403,但我只是想让他知道高流量的情况。 但问题是 < li >我如何了解将图像上传到S3预签名URL所需的时间? < li >我们可以从S3预签名URL上的PUT请求中获得哪些状态代码?(如果可以帮助我一些相同的文档;https://docs . a

  • 标题说明一切。这是我的代码; 我使用节点强大的文件。 成功上传后,url变量返回s3 url,类似以下内容; 下面是我的参数 我错过了什么?

  • 我试着给多个URL全部许可,但我得到了403。当我禁用csrf时,所有请求都在没有身份验证的情况下工作。请在下面找到我的安全配置。 请指正我遗漏的地方。谢谢你...

  • 嗨,当我尝试使用vue应用程序中预先指定的url将图像上传到我的amazon aws bucket时,我收到了400个错误请求。我已经成功生成了一个预先签名的url,但我无法使用它将图像发布到我的bucket。 获取预签名网址的路线 Vue client Vuex操作发布到预先指定的url Aws CORS许可 我得到“请求失败,状态代码400”错误。

  • 我已经尝试了网络上提供的所有解决方案,但都无效。请尽快提供帮助。同步错误: 生成文件“C:\Users\AH\U GL\Desktop\apps android commons\apps\Build”。格拉德尔线:149 评估项目“:app”时出现问题。 没有方法的签名:build_bacf6ncg9oj63qiyhi1id1rfi.android()适用于参数类型:(build_bacf6ncg

  • 我有一个受保护的Web API正在运行,我想访问它。在Azure中,应用注册是: 具有Web API租户管理员权限的SPA Web API没有租户管理员权限,因此请求其id的令牌将返回“应用需要访问资源的权限”错误 我正在尝试获取Web API的承载令牌。问题是它不适用于MSAL,但适用于ADAL。 以下是我的“SPA”的ADAL vanilla JS代码: 如果我在“邮递员”中复制令牌并执行请求