我正在构建一个无服务器 React 应用程序(使用 npm 进行开发),它使用 DropzoneS3Uploader 将图像上传到 S3。我将其配置为使用 API Gateway(由 Lambda 支持)在将文件上传到 S3 存储桶之前请求签名 URL
const uploadOptions = {
s3Path: '/<folder>/',
signingUrl: 'https://<my-api>.eu-west-1.amazonaws.com/Prod/<api>',
signingUrlMethod: 'POST',
accept: 'image/*',
autoUpload: true
};
render 方法继续返回组件,如下所示...
<div>
<DropzoneS3Uploader
onFinish={this.handleFinishedUpload}
s3Url='http://<my-bucket>.s3-website-eu-west-1.amazonaws.com'
upload={uploadOptions}
/>
</div>
执行此操作时,它会设法生成签名的 URL。
请求 URL:https://.eu-west-1.amazonaws.com/Prod/?objectName=&contentType=image%2Fjpeg 请求方法:POST 状态代码:200
{"signed_url":"https://<my-bucket>.eu-west-1.amazonaws.com/<some_image.jpg>?X-Amz-Algorithm=AWS4-HMAC-....X-Amz-Signature=...&X-Amz-SignedHeaders=host"}
然而,它直接从那个进入 404(下面的堆栈跟踪)。我开始怀疑 npm 是否尝试将图像缓存为临时文件?无论出现什么问题,在对 S3 的 PUT 请求期间它似乎都无法引用服务器/图像......
请求 URL:http://localhost:3000/undefined 请求方法:PUT 状态码:404 Not Found
http://localhost:3000/undefined 404(未找到)./node_modules/react-dropzone-s3-uploader/node_modules/react-s3-uploader/s3upload.js.S3Upload.uploadToS3 @ s3upload.js:171(匿名) @ s3upload.js:108 XMLHttpRequest.send (async) ./node_modules/react-dropzone-s3-uploader/node_modules/react-s3-uploader/s3upload.js.S3Upload.executeOnSignedUrl @ s3upload.js:113 ./node_modules/react -dropzone-s3-uploader/node_modules/react-s3-uploader/s3upload.js.S3Upload.uploadFile @ s3upload.js:178 (匿名) @ s3upload.js:53 ...
作为 DropzoneS3Uploader 上传选项的一部分,有一个“服务器”选项。把它留空,我得到这个错误,用其他人填充它,它用我提到的任何服务器 URL 替换错误。如前所述,我计划运行这个无服务器,所以没有服务器可提。
其他人以前看过这个或有什么建议吗?
我切换到 Dropzone 并使用 axios 并且它工作正常,所以我想知道 DropzoneS3Uploader 是否只是抽象了太多的实现代码以允许控制这种行为?
谢谢!