首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何将文件上传到AWS中的预签名URL?

如何将文件上传到AWS中的预签名URL?
EN

Stack Overflow用户
提问于 2018-08-04 05:28:27
回答 1查看 772关注 0票数 1

Problem

我有一个来自AWS的预签名URL。我该怎么做呢?

(我必须使用预签名的URL。我将调用createUpload API for Device Farm,它将返回1。)

AWS Documentation gives examples on how to do this in Java, .NET and Ruby。缺少JavaScript。

尝试1

代码语言:javascript
复制
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。

代码语言:javascript
复制
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';
    }
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-08-04 05:28:27

解决方案出人意料地简单:

代码语言:javascript
复制
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);
}
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51680281

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档