我設置了我的Rails應用程序,使用this tutorial直接上傳文件到AWS S3,它非常棒。現在我正在使用this SO post中的相同方法直接下載。當我嘗試並觸發它掛起下載,然後最後返回以下錯誤:使用presigned_post - 致命異常導入AWS S3文件的Rails下載
fatal at /user/doc_uploads/download exception reentered
在下面顯示的代碼似乎是在服務器上的一個無限循環的puts
。我只是不太瞭解這個代碼應該如何工作以解決這個問題。請幫忙!
doc_uploads_controller.rb
def get
@doc_download = @user.doc_uploads.find_by_id(params[:id])
if @doc_download
key = @doc_download.file_url.split('amazonaws.com/')[1]
puts key
puts S3_BUCKET_NAME
bucketlink = S3_BUCKET_NAME.object(key).presigned_url(:get, expires_in: 3600)
puts bucketlink
redirect_to bucketlink
else
flash[:error]="Something went wrong."
redirect_to user_dashboard_path
end
end
aws.rb:
Aws.config.update({
region: 'us-east-1',
credentials: Aws::Credentials.new(ENV['AWS_ACCESS_KEY_ID'], ENV['AWS_SECRET_ACCESS_KEY']),
})
S3_BUCKET_NAME = Aws::S3::Resource.new.bucket(ENV['S3_BUCKET_NAME'])
routes.rb中:
get 'user/doc_uploads/download', to: 'doc_uploads#get'
視圖:
<% @doc_uploads.each do |doc_upload| %>
...
<%= link_to user_doc_uploads_download_path(id: doc_upload.id), target: '_blank' do %>
<p class="glyphicon glyphicon-download-alt"></p>
<% end %>
...
<% end %>
提前致謝!
什麼輸出你用's3.bucket得到(ENV [ 'S3_BUCKET_NAME'] ).object(parsed_url).presigned_url(:get,expires_in:3600)' –
@ dipak-g如果我爲代碼添加一個put,它不會向服務器輸出任何內容。有另一種檢查方法嗎? – CChandler81
編輯代碼以更正設置密鑰並以更直接的方式設置bucketlink,但仍會獲得無限循環和致命異常。 – CChandler81