使用 presigned_url 触发 S3 文件下载
Triggering download of S3 file with presigned_url
我正在尝试通过我的 rails 应用访问我的 S3 服务器上的文件。目前,该应用程序能够通过 aws-sdk v2 gem 创建一个 presigned_url
,然后重定向以显示文件(我主要使用图像作为文件)。这一切都很好,但我不是简单地在浏览器中显示文件,我真的很想触发该文件的自动下载。
和重定向一样,我的代码如下:
def get
asset = current_user.assets.find_by_id(params[:id])
if asset
s3 = Aws::S3::Resource.new
bucketlink = s3.bucket(ENV['S3_BUCKET_NAME']).object(asset.uploaded_file.path).presigned_url(:get, expires_in: 3600)
redirect_to bucketlink
else
flash[:error]="Don't be cheeky! Mind your own assets"
redirect_to assets_path
end
end
谁能告诉我如何触发此文件的下载?非常感谢。
我对 ruby 一无所知,所以这是一个猜测..但基于我直接使用 REST API 和 quick search of the SDK docs 的专业知识我想到的字符串,我想你正在寻找这样的东西:
bucketlink = s3.bucket(ENV['S3_BUCKET_NAME']).object(asset.uploaded_file.path).presigned_url(:get, expires_in: 3600, response_content_disposition: 'attachment; filename=myfile.jpg')
当 &response-content-disposition=value
出现在经过身份验证的 GET
请求的查询字符串中时,S3 returns 该值作为响应中的 Content-Disposition:
header。 "attachment" 表示 "download, don't display" 并且文件名是浏览器通常使用的文件名,或者如果显示 "save as" 提示则作为默认文件名提供...因此用户下载的文件名可以不同比存储在 S3 中的文件名。 'attachment;<space>filename=<target-filename>'
是一个字符串,您需要构建它以包含一些合理的内容,而不是 "myfile.jpg" 当然。
我正在尝试通过我的 rails 应用访问我的 S3 服务器上的文件。目前,该应用程序能够通过 aws-sdk v2 gem 创建一个 presigned_url
,然后重定向以显示文件(我主要使用图像作为文件)。这一切都很好,但我不是简单地在浏览器中显示文件,我真的很想触发该文件的自动下载。
和重定向一样,我的代码如下:
def get
asset = current_user.assets.find_by_id(params[:id])
if asset
s3 = Aws::S3::Resource.new
bucketlink = s3.bucket(ENV['S3_BUCKET_NAME']).object(asset.uploaded_file.path).presigned_url(:get, expires_in: 3600)
redirect_to bucketlink
else
flash[:error]="Don't be cheeky! Mind your own assets"
redirect_to assets_path
end
end
谁能告诉我如何触发此文件的下载?非常感谢。
我对 ruby 一无所知,所以这是一个猜测..但基于我直接使用 REST API 和 quick search of the SDK docs 的专业知识我想到的字符串,我想你正在寻找这样的东西:
bucketlink = s3.bucket(ENV['S3_BUCKET_NAME']).object(asset.uploaded_file.path).presigned_url(:get, expires_in: 3600, response_content_disposition: 'attachment; filename=myfile.jpg')
当 &response-content-disposition=value
出现在经过身份验证的 GET
请求的查询字符串中时,S3 returns 该值作为响应中的 Content-Disposition:
header。 "attachment" 表示 "download, don't display" 并且文件名是浏览器通常使用的文件名,或者如果显示 "save as" 提示则作为默认文件名提供...因此用户下载的文件名可以不同比存储在 S3 中的文件名。 'attachment;<space>filename=<target-filename>'
是一个字符串,您需要构建它以包含一些合理的内容,而不是 "myfile.jpg" 当然。