我使用Ruby on Rails创建了一个简单的Rest api服务器。我已添加到我的route.rb中,它将整个路径发送到myapp的控制器更新方法,我需要:
put 'dreceiver/*other', to: 'myapps#update'
我的控制器:
class MyAppsController < ApplicationController
protect_from_forgery with: :null_session
# PUT
# Expected Parameters: {"other"=>"api/1.0/file/abc123"}
def update
#Need to grab last part of path sent in:
if params[:other] =~ /api\/1.0\/file\/.*/
batchid = params[:other].split('/').last
else
batchid = nil
end
unless batchid.nil?
render :text => '', :status => 201
else
render :text => '', :status => 401
end
return
end
end
我的问题:我希望在PUT请求的正文中发送一个gzip文件。我需要将它保存到文件系统。我看到了许多使用回形针将其存储在数据库中的示例,但如果我不必这样做,我真的不想进行任何迁移或处理数据库...这是只是为了测试一些发送文件的客户端代码。感谢您的帮助。
答案 0 :(得分:0)
Paperclip不会将上传的文件存储在数据库中,而是将它们存储在文件系统中,然后将文件名写入数据库(通常可以通过多种方式进行配置)。
多部分POST(和PUT或PATCH)就像常规POST一样工作。 Rails将自动从请求主体创建一个类似Hash的对象。此哈希值中的一个值应该是响应#tempfile
的对象,您可以将其视为普通File
对象。
def update
gzip_file = params[:uploaded_file].tempfile # replace uploaded_file with the field name
...
end