Итак, я пытаюсь создать небольшой блог для публикации изображений, вроде как 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).
Не решение, но я бы посоветовал вам взглянуть либо на хранилище файловой системы, либо на сохранение данных на S3. Вы можете быстро собрать гигабайты данных изображения, и ваши затраты на управление этим бинарником postgres, вероятно, будут выше, чем просто плоский диск или s3. Если вы это сделаете, вы сохраните ссылку на файл в своей таблице, а затем прочитайте оттуда. Посмотрите на Refile gem для примеров того, как они реализуются. – Austio
Похоже, я пойду проверить файловую систему хранения. Могу ли я использовать его с герокой? Приложение должно быть развернуто для запуска герою, разрешают ли они такую систему? – lockykeaney
Нет, вам нужно облако хранения, как S3. Их файловая система является эфемерной. https://github.com/refile/refile несущая волна также имеет легкую загрузку в s3, но требует большей конфигурации. – Austio