如何使用React使用axios将文件上传到S3存储桶,以及使用aws-sdk将文件上传到S3存储桶?

时间:2020-06-17 13:07:35

标签: javascript reactjs amazon-s3 axios

在我看到太多关于将文件上传到S3的帖子之后,我似乎无法使用任何方法。我最终使用了这种方法,该方法似乎在几篇文章中都可以使用,但我真的不知道我在做什么错。

我使用节点服务器上的presignedUrl来获得aws-sdk,一切都很好,但是当使用以下方法上传实际文件时,它将返回协议错误;

获取文件并请求对其进行签名

let file = target.files[0];
    // Split the filename to get the name and type
    let fileParts = target.files[0].name.split('.');
    let fileName = formatFilename(fileParts[0]);
    let fileType = fileParts[1];

    const { signedRequest } = await axios.post('/upload', { fileName, fileType })

创建一个FormData

var bodyFormData = new FormData();
    bodyFormData.append('image', file)
    bodyFormData.append('name', fileName)

然后我将上传文件

const uploadImageRequest = {
        method: 'PUT',
        url: signedRequest,
        body: bodyFormData,
        headers: {
            'Content-Type': 'multipart/form-data'
        }
    }

    axios(uploadImageRequest)
        .then(result => {
            console.log("Response from s3", result)
        })
        .catch(error => {
            console.log("ERROR ", error);
        })

最后它返回以下错误

ERROR  TypeError: Cannot read property 'protocol' of undefined
    at isURLSameOrigin.js:57
    at xhr.js:109
    at new Promise (<anonymous>)
    at e.exports (xhr.js:12)
    at e.exports (dispatchRequest.js:50)

1 个答案:

答案 0 :(得分:0)

确保您在axios中使用的网址(signedRequest)没有未定义