2016-01-26 2 views
1

Итак, я пытаюсь создать небольшой блог для публикации изображений, вроде как tumblr, но только для изображений The Simpsons (это для класса).Загрузка изображений в Postgres с помощью Sinatra

Я пытаюсь выполнить прямую загрузку с помощью Sinatra в базу данных Postgres, и я могу получить соединение, и он добавляет содержимое, но добавляет каждую деталь, а не только изображение. я получаю этот мусор:

"image/png", :name=>"file", :tempfile=>#, :head=>"Content- Disposition: form-data; name=\"file\"; filename=\"Homer_Simpson_4.png\"\r\nContent-Type: image/png\r\n"}" alt=""> 

, где должно быть показано изображение.

Я думаю, что это как-то связано с преобразованием изображения, чтобы сделать его читаемым. Двоичные данные? Я хочу только изображение, хранящееся на db, и, возможно, переименуйте его, чтобы что-то легко сохранить.

Это маршрут загрузки У меня есть

post '/upload' do 
@post = Post.new 

@post.content = params[:file] 
@post.user_id = current_user.id 
@post.save 

unless params[:file] && 
    (tmpfile = params[:file][:tempfile]) && 
    (name = params[:file][:filename]) 
@error = "No file selected" 
return erb :submit 
end 
STDERR.puts "Uploading file, original name #{name.inspect}" 
while blk = tmpfile.read(65536) 
# here you would write it to its final location 
STDERR.puts blk.inspect 
end 
"Upload complete" 
redirect to '/' 
end 

Я получил этот код из рубинового-форума, и он делает все, что я думал, что это будет, и хлопает меня обратно, даже делает некоторые хранения.

и это форма у меня есть:

<form action="/upload" method="post" enctype="multipart/form-data"> 
<label for="">Upload an Image</label> 
<input type="file" name="file" /> 
<button>Submit</button> 
</form> 

У меня есть модель для почтовой базы данных (активная запись), а столбцы являются только идентификатор поста, содержание и user_id плаката ,

Я никогда раньше не пробовал использовать какой-либо загрузчик, поэтому я очень смущен тем, как файл загружает магазины. Нужен ли мне новый столбец для изображения? Или, может быть, стол?

Извините, если это чередование вопроса, я пытаюсь работать над возможностями переполнения стека (получается, что это очень важная часть разработки, а также Googling).

+3

Не решение, но я бы посоветовал вам взглянуть либо на хранилище файловой системы, либо на сохранение данных на S3. Вы можете быстро собрать гигабайты данных изображения, и ваши затраты на управление этим бинарником postgres, вероятно, будут выше, чем просто плоский диск или s3. Если вы это сделаете, вы сохраните ссылку на файл в своей таблице, а затем прочитайте оттуда. Посмотрите на Refile gem для примеров того, как они реализуются. – Austio

+0

Похоже, я пойду проверить файловую систему хранения. Могу ли я использовать его с герокой? Приложение должно быть развернуто для запуска герою, разрешают ли они такую ​​систему? – lockykeaney

+1

Нет, вам нужно облако хранения, как S3. Их файловая система является эфемерной. https://github.com/refile/refile несущая волна также имеет легкую загрузку в s3, но требует большей конфигурации. – Austio

ответ

1

Вы действительно должны посмотреть на refile или carrierwave оба были написаны отличным разработчиком и сделали работу очень простой. На самом деле, не пытайтесь хранить в базе данных, и вы определенно не можете хранить на Heroku.

+0

Получил две рекомендации для refile. Сначала проверьте его. Спасибо! Быстрый вопрос: какой бы загрузчик, к которому я сейчас использую, обычно используется? Маленькие текстовые файлы? – lockykeaney

+0

Да, я бы, вероятно, использовал его только для простых вещей, таких как загрузка CSV или аналогичного, что вы собираетесь разобрать сразу и никогда не хранить. – james2m

Смежные вопросы