【发布时间】:2019-11-30 23:12:10
【问题描述】:
我的 S3 存储桶中存储了一个 CSV 文件,我想在 Rails 中添加一个方法,以便用户可以单击一个按钮并下载该文件。在控制器中我放了以下
def s3_downloader(bucketName, key, localPath)
# (1) Create S3 object
s3 = Aws::S3::Resource.new(region: 'us-east-2')
# (2) Create the source object
sourceObj = s3.bucket(bucketName).object(key)
# (3) Download the file
sourceObj.get(response_target: localPath)
puts "s3://#{bucketName}/#{key} has been downloaded to #{localPath}"
end
我从Tutorial得到的
请问我应该把什么作为localPath?我尝试了一些简单的方法:
s3_downloader(Rails.application.secrets.s3_bucket_name, "Product_csv_file_sample.csv", "/Downloads")
但我得到了错误:
Errno::EACCES (Permission denied @ rb_sysopen - /Downloads)
2.6.3 :040 > s3_downloader(Rails.application.secrets.s3_bucket_name, "Product_csv_file_sample.csv", "/Downloads")
Traceback (most recent call last):
3: from (irb):40
2: from (irb):40:in `rescue in irb_binding'
1: from (irb):30:in `s3_downloader'
另外,我如何确保无论用户使用的是 Mac 还是 Windows,localPath 仍然有效。
下载文件夹中的chmod 'chown'返回:
usage: chmod [-fhv] [-R [-H | -L | -P]] [-a | +a | =a [i][# [ n]]] mode|entry file ...
chmod [-fhv] [-R [-H | -L | -P]] [-E | -C | -N | -i | -I] file ...
【问题讨论】:
-
“/Downloads”指的是哪里?在客户端还是服务器上?您不需要在客户端上指定文件夹。
-
您似乎正在尝试访问服务器上的文件夹。而不是响应文件,让浏览器将其放置在默认下载位置。
-
嗨,我以为我将 localPath 指示为下载文件的文件夹。请问你有什么推荐的?
-
可能在将文件发送到客户端之前创建一个临时路径来存储文件。例如
"/#{Rails.root}/tmp/downloads/#{some_id_here}/"
标签: ruby-on-rails