Я пытаюсь загрузить файл на Box.com, используя вызов REST API и гем httmultiparty. . Код работает и загружается на Box.com, но делает это после записи загруженного файла в файловую систему сервера, как в f.write(data.read), а затем записывает путь к записанному файлу в качестве входного параметра для Box. com API REST, как в :filename => File.new(path). Приложение будет работать на Heroku, поэтому мы не можем сохранять файлы (только для чтения) на сервере Heroku, поэтому я хотел бы напрямую загрузить файл на Box.com, минуя запись файла на сервере, но не могу выясните это, учитывая, что для вызова Box.com REST требуется объект типа «Файл». Любая помощь приветствуется. Спасибо.
Код модели и представления:
###
#The Model
###
class BoxUploader
require 'httmultiparty'
include HTTMultiParty
#base_uri 'https://api.box.com/2.0'
end
class File < ActiveRecord::Base
attr_accessible :file
attr_accessor :boxResponse
FILE_STORE = File.join Rails.root, 'public', 'files'
API_KEY = @myBoxApiKey
AUTH_TOKEN = @myBoxAuthToken
def file=(data) #uploaded file
filename = data.original_filename
path = File.join FILE_STORE, filename
#### would like to bypass the file writing step
File.open(path, "wb") do |f|
f.write(data.read)
end
#############
File.open(path, "wb") do |f|
boxResponse = BoxUploader.post('https://api.box.com/2.0/files/content',
:headers => { 'authorization' => 'BoxAuth api_key={API_KEY&auth_token=AUTH_TOKEN' },
:body => { :folder_id => '911', :filename => File.new(path)}
)
end
end
###
# The View
###
<!-- Invoke the Controller's "create" action -->
<h1>File Upload</h1>
<%= form_for @file, :html => {:multipart=>true} do |f| %>
<p>
<%= f.label :file %>
<%= f.file_field :file %>
</p>
<p>
<%= f.submit 'Create' %>
<% end %>