Ruby on rails 让用户在Rails应用程序中下载CSV文件

Ruby on rails 让用户在Rails应用程序中下载CSV文件,ruby-on-rails,Ruby On Rails,我有一个CSV文件存储在我的S3存储桶中,我想在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.buc

我有一个CSV文件存储在我的S3存储桶中,我想在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
这是我从

我应该把什么作为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仍然有效

downloads文件夹中的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 ...

根据您发布的错误,运行
rails服务器的用户似乎没有写入/读取
Downloads
目录的权限。我会检查那里,并根据需要使用
chmod
`chown`来修复它们。

根据您发布的错误,运行
rails服务器的用户似乎没有写入/读取
下载
目录的权限。我会检查那里,并在必要时使用
chmod
'chown`.

哪里是“/Downloads”指的是什么?在客户端还是服务器上?您不需要在客户端上指定文件夹。看起来您正在尝试访问服务器上的文件夹。不是用文件响应,而是让浏览器将其放置在默认下载位置。嗨,我想我是在指示localPath作为下载文件的文件夹。请推荐什么?在将文件发送到客户端之前,可以创建一个临时路径来存储文件。例如
“/#{Rails.root}/tmp/downloads/#{some_id_here}/”
还研究了如何使用“/downloads”所指的文件响应web请求?在客户端还是服务器上?您不需要在客户端上指定文件夹。看起来您正在尝试访问服务器上的文件夹。不是用文件响应,而是让浏览器将其放置在默认下载位置。嗨,我想我是在指示localPath作为下载文件的文件夹。请推荐什么?在将文件发送到客户端之前,可以创建一个临时路径来存储文件。例如
“/#{Rails.root}/tmp/downloads/#{some_id_here}/”
还研究了如何使用文件响应web请求我修改了问题以添加chmodI的结果修改了问题以添加chmod的结果