javascript - 如何将文件上传到 AWS 中的预签名 URL?
问题描述
问题
我有一个来自 AWS 的预签名 URL。我需要上传一个文件给它。我该怎么做呢?
(我必须使用预签名的 URL。我正在调用createUpload
Device Farm 的 API,它返回一个。)
AWS 文档提供了有关如何在 Java、.NET 和 Ruby 中执行此操作的示例。缺少 JavaScript。
尝试 1
我在这里改编了这个例子。
const axios = require('axios');
const FormData = require('form-data');
function uploadFile(url, file) {
if (typeof url !== 'string') {
throw new TypeError(`Expected a string, got ${typeof url}`);
}
const formData = new FormData();
formData.append(file,file)
const config = {
headers: {
'content-type': 'multipart/form-data'
}
}
return axios.post(url, formData,config)
}
但是我收到此错误:
我们计算的请求签名与您提供的签名不匹配。检查您的密钥和签名方法。
尝试 2
我让它与 cURL 一起工作。但是,我不想依赖 cURL。
const Promise = require('bluebird');
const cmd = require('node-cmd');
const getAsync = Promise.promisify(cmd.get, { multiArgs: true, context: cmd });
async function uploadFile(url, fileName) {
await throwIfCurlNotInstalled();
console.log('uploadFile: Uploading file', {
fileName
});
const command = `curl -T ${fileName} "${url}"`;
try {
let result = await getAsync(command);
result.forEach(line => console.log(line));
console.log('uploadFile: File uploaded', {
fileName,
});
} catch (e) {
console.error('uploadFile: Error uploading file', {
fileName
});
console.error(e);
}
}
async function throwIfCurlNotInstalled() {
try {
await getAsync(`curl -V`);
} catch (e) {
throw 'curl is not installed';
}
}
解决方案
解决方案非常简单:
const rp = require('request-promise');
const fs = require('fs');
async function uploadFile(url, fileName) {
let options = {
method: 'PUT',
uri: url,
body: fs.readFileSync(fileName),
};
return rp(options);
}
推荐阅读
- ios - React-Native componentWillUnmount 未在 iOS 上调用
- angular - matdialog打开方法的Angular 7单元测试用例
- javascript - 除非明确覆盖,否则“异步”函数是否会立即返回 resolve(undefined)?
- javascript - 如何在打字稿中执行并行循环
- javascript - 我的问题是关于使用 javascript 以正确的方式将“html 代码”加载到 iframe 中
- javascript - 无法绑定到“模式”,因为它不是“mat-sidenav”的已知属性
- mysql - Model MVC Express API - 错误“connection.query 不是函数”
- amazon-web-services - Haproxy 多实例 - 服务后端不稳定 5 分钟
- mongodb - 如何在mongodb中获取其他元素以及arrayToObject?
- javascript - 语句未按预期执行