5

Amazon Web サービス s3 とのやり取りに、ペーパークリップ、carrierwave、またはその他の宝石を使用していません。実際、私はモデルを使用しておらず、S3 オブジェクトを直接操作しているだけです。

AWS S3 からオブジェクト (ファイル) を直接ダウンロードする方法について、誰かがコードを提供してくれませんか?

これはこれまでの私のコードです:

意見:

<h2>Download Files</h2>
<%@root_files.each do |file| %>
<% next if @obj %>        
<td>Filename:  <b><%= file %></b></td>
<td><%= link_to "Download", download_url_for(file) %></td>
<% end %>

対応コントローラー:

def xxx
bucket = AWS::S3.new.buckets[ ENV["BUCKET"]]
@root_files = bucket.as_tree.children.select(&:leaf?).collect(&:key) 
end

download_url_for メソッド:

def download_url_for(file_key)
  s3 = AWS::S3.new
  bucket = s3.buckets[ ENV["BUCKET"]]
  object = bucket.objects[file_key]
  File.open('xxxxx', 'wb') do |file|
    object.read do |chunk|
      file.write(chunk)
    end
  end
end

ダウンロードしたファイルを、デスクトップ上の閲覧可能な事前定義されていない場所に保存できるようにする必要があります。

===================================== 使ってみたところ

<td><%= link_to "Download",object.value.url_for(:read).to_s %></td>

しかし、ダウンロードすると、元のファイル (私の場合はワード文書) ではなく、xml コンテンツを含む zip ファイルのみが取得されます --- 実際のファイルの種類と内容を取得するためにこれを変更する方法について何か考えはありますか? ありがとう

=======================ファイルをアップロードするための私のコードはこちら

コードを表示:

<%= form_tag({:action => 'create_file'}, multipart: true) do %>
<%= file_field_tag 'uploaded_file' %><br />
<%= submit_tag 'Upload' %> <br />
<% end %>

コントローラ アクション- create_file アクション

def create_file 
s3 = AWS::S3.new
bucket = s3.buckets[ENV["BUCKET"]]
key = params[:uploaded_file].original_filename
object = bucket.objects[key] 
object.write(params[:uploaded_file].read)
end

@Frederick Cheungが言及した問題である場合、アップロード中にMIMEタイプを確認したり、ファイル名を保存したりする方法について誰かが提案できますか? ありがとう

4

1 に答える 1