我有一个API,该API带有使用Rails和ActiveStorage(带有S3作为文件服务器)的文件上传端点。我想直接从客户端应用程序上传到S3,但是Active Storage文档中提供的代码仅显示使用Javascript https://edgeguides.rubyonrails.org/active_storage_overview.html#direct-uploads
由于我直接将带有文件的POST请求发送到Rails API,所以没有地方可以运行JS。
仅使用Rails API的应用程序可以使用直接上传吗?
答案 0 :(得分:0)
为了解决类似的问题,我遵循了AWS documentation
中提出的方法简单的概念是,对于要上传的每个文件,我执行以下工作流程:
例如:
GET myserver.com/api/signed_url?filename=<safe_file_name>
1.1。回复
{
presigned_url: "https://bucket-name.s3.us-west-1.amazonaws.com/uploads/1bb275c5-0199-41fe-ac40-133601f5efb0?x-amz-acl=public-read...",
public_url: "https://bucket-name.s3.us-west-1.amazonaws.com/uploads/1bb275c5-0199-41fe-ac40-133601f5efb0"
}
PUT <presigned_url>, data: <file_to_upload>, cache: false, processData: false
2.1。等待S3直接上传200(确定)
POST myserver.com/api/document, data: { name: 'new file', document_url: <public_url> }