RoR保存正文放入文件系统

时间:2017-11-29 00:14:14

标签: ruby-on-rails rest

我使用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文件。我需要将它保存到文件系统。我看到了许多使用回形针将其存储在数据库中的示例,但如果我不必这样做,我真的不想进行任何迁移或处理数据库...这是只是为了测试一些发送文件的客户端代码。感谢您的帮助。

1 个答案:

答案 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