尝试上传到 aws s3 存储桶时收到 400 错误请求

2024-04-21

我在服务器上签署 URL 并将其发送回客户端,效果很好。这就是该函数的样子

const aws = require('aws-sdk'),
    config = require('config'),
    crypto = require('crypto');


module.exports = async function(file_type) {

    aws.config.update({accessKeyId: config.AWS_ACCESS_KEY, secretAccessKey: config.AWS_SECRET_KEY})

    const s3 = new aws.S3();

    try {
        if (!file_type === "image/png") {
            return ({success: false, error: 'Please provide a valid video format'});
        }
        let buffer = await crypto.randomBytes(12);

        let key = buffer.toString('hex');

        let options = {
            Bucket: config.AWS_S3_BUCKET,
            Key: key,
            Expires: 60,
            ContentType: file_type,
            ACL: 'public-read',
        }

        let data = await s3.getSignedUrl('putObject', options);
        console.log('data was', data)
        return ({
            success: true,
            signed_request: data,
            url: ('https://s3.amazonaws.com/' + config.AWS_S3_BUCKET + '/' + key),
            key,
        });
    } catch (error) {
        console.log('the error was', error)
        return ({
            success: false,
            error: error.message,
        })
    }
}

所以这工作正常,最终给我一个像这样的网址

然后,当我在客户端返回该 url 时..我使用 axios 发送一个 PUT 请求,其功能如下 -

function uploadToS3(file, signedRequest, callback){

    var options = {
        headers: {
            'Content-Type': file.type
        }
    };

    axios.put(signedRequest, file, options)
        .then(result =>{
            console.log('the result was', result)
            callback(result)
        })
        .catch(err =>{
            callback(err)
        })

}

我唯一返回的是 (400) 错误请求


我遇到了同样的问题,经过几个小时的搜索后,我能够通过将存储桶区域添加到服务器端后端来解决它,我在其中请求签名 URLs3.getSignedUrl().

const s3 = new AWS.S3({
    accessKeyId:"your accessKeyId",
    secretAccessKey:"your secret access key",
    region:"ap-south-1" // could be different in your case
})
const key = `${req.user.id}/${uuid()}.jpeg`

s3.getSignedUrl('putObject',{
        Bucket:'your bucket name',
        ContentType:'image/jpeg',
        Key:key
    }, (e,url)=>{
        res.send({key,url})
})

获得签名 URL 后,我使用axios.put()在客户端使用 URL 将图像上传到我的 s3 存储桶。

  const uploadConf = await axios.get('/api/uploadFile');
  await axios.put(uploadConf.data.url,file, {
    headers:{
      'Content-Type': file.type
    }
  });

希望这能解决您的问题。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

尝试上传到 aws s3 存储桶时收到 400 错误请求 的相关文章

随机推荐

  • 如何使用多个XMLHttpRequest?

    我需要从 8 个不同的 URL 获取 8 个 JSON 我将必须更改的查询字符串存储在数组中 并使用 for 循环遍历它 这是我的代码 var index ESL SC2 OgamingSC2 cretetion freecodecamp
  • 通过函数更改字符串值[重复]

    这个问题在这里已经有答案了 我注意到我的代码有很多这样的语句 var some string var some func var var another func var print var outputs modified string
  • '%(FullPath)...”' aria-label='NuGet 包失败并显示“无法找到 '@(_OutputPathItem->'%(FullPath)...”'> NuGet 包失败并显示“无法找到 '@(_OutputPathItem->'%(FullPath)...”

    我正在尝试我的第一个 NuGet 包 但遇到了一些麻烦 我有一个相当简单的项目和一个非常简单的 nuspec 文件
  • HTML 表单动作搜索,1 个文本框,2 个按钮,2 个可能的结果

    这些天我正在尝试做一个搜索表单 该表单发送到两个不同的页面 其中有两个不同的按钮和一个文本框 到目前为止我正在这样做
  • 如何在SceneKit中实现逼真的景深效果?

    我正在尝试渲染具有真实景深效果的帧 我已经尝试过景深属性camera节点 但它不会产生可用的结果 是否可以切换到景深效果的最大渲染质量 性能不是一个因素 我只需要渲染一帧 用户可以等待它 SceneKit 中逼真的景深效果 在SceneKi
  • 如何在 WordPress 短代码中使用 AJAX?

    我有一个代码来显示随机报价 有人编写了一个函数来实现这一切 但由于某种原因通过AJAX更新数据不起作用 当您按下 新报价 按钮时 什么也没有发生 也许有人知道为什么 以下代码中需要修复什么 以便当您单击 新报价 时加载新报价 The PHP
  • 如何实施IDEA?

    我必须制作一个可以使用 Java 或 C 中的 IDEA 国际数据加密算法 加密和解密文本文件的应用程序 我知道Java中有一个内置的JCE Java加密扩展 但是我该如何进一步进行 有人能给我一些建议吗 由于某种原因无法发表评论 所以我将
  • 将先前的提交分解为多个提交

    如果不创建分支并在新分支上做一堆时髦的工作 是否可以在将单个提交提交到本地存储库后将其分解为几个不同的提交 git rebase i http git scm com book en v2 Git Tools Rewriting Histo
  • 如何在 EF 4.1 RC 中的 DbContext 级别关闭更改跟踪?

    我遇到了一个似乎很常见的问题 我正在更新数据库中的值 但 EF 正在使用对象的原始内存副本 并且这些更改的值不会反映在显示的数据中 我明白这是为什么 但我无法找到解决方法 最常见的解决方案似乎是设置MergeOptions NoTracki
  • OpenCV SURF功能未实现

    当我尝试运行示例时find obj cpp或任何 OpenCV SURF 程序 在执行代码时 我在命令提示符中收到以下错误 该项目构建时没有错误和警告 我使用的是 VS2011 beta OpenCV 2 4 和 windows7 错误信息
  • 附加搜索词时如何重用 jquery-ui-autocomplete 缓存结果?

    我有以下 JS 方法将 jQuery UI 自动完成小部件绑定到搜索文本框 一切工作正常 包括缓存 但在附加搜索词时我进行了不必要的服务器调用 因为我不重用刚刚检索的结果 例如 搜索 ab 会从服务器获取一些结果 在搜索框中的 ab 后面键
  • 从网络下载已使用 wavesurfer.js 修改的音频

    我使用wavesurfer js 创建了一个多轨网络播放器 它可以调整不同轨道的级别和平移 我想要做的是将具有新级别的混合曲目导出并将平移作为单个 wav 文件 我对此做了一些研究 很多人都指出https github com mattdi
  • 如何使用 Oracle 清理死连接?

    现在 我正在针对 Oracle 数据库开发一些新应用程序 有时它们会崩溃或无法正确结束 等等 无论如何 问题是它们有时似乎保持连接打开 我需要在它们之后进行清理 我的问题是 是否有一种方法可以从数据库端确定死连接并清理它们 这是一个页面 涉
  • C# 3.5 ASP.net 文件 IO 问题,网络共享上的文件出现 UnauthorizedAccessException

    每次我尝试访问时都会收到 UnauthorizedAccessException 只是read 网络共享上的文件 服务器 文件夹1 文件夹2 文件 pdf 我正在模拟对上述文件夹具有读写访问权限的域 aspnet 用户 该文件不是只读的 我
  • TextInputLayout.passwordVisibilityToggleRequested 上的 NullPointerException

    我在 Firebase 崩溃报告中收到有关以下内容的错误Password toggle button在某些真实设备中处于发布模式的应用程序上 问题是堆栈跟踪错误的全部内容android support design您将在从 Firebase
  • livereload 不提供地址选择

    更新node js后 我发现了这个问题 当我运行 ionic cordova run android livereload 时 它在本地主机中运行 我该如何解决这个问题 请帮我 离子信息 Ionic CLI 5 2 1 Ionic Fram
  • 如何有条件地实例化不同的子类?

    例如 在main函数中 我想获取用户的输入 根据输入 我将创建一个Rectangle or a Circle 它们是子类Object 如果没有输入 或未知 那么我将只创建一个通用对象 class Object public Object v
  • Eclipse 指标插件建议[关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我正在寻找一个工具来为我提供一些代码指标 LOC 总数 LOC 类 外部引用 类的数量等 有谁知道一个
  • 哪个 XML 解析器可以处理不完整的 XML 文件?

    我正在尝试使用 SAX 解析器解析 XML 但不断出现XML document structures must start and end within the same entity 这是预料之中的 因为我从其他来源获得的 XML 文档不
  • 尝试上传到 aws s3 存储桶时收到 400 错误请求

    我在服务器上签署 URL 并将其发送回客户端 效果很好 这就是该函数的样子 const aws require aws sdk config require config crypto require crypto module expor