【发布时间】:2016-05-02 13:34:59
【问题描述】:
所以,我正在尝试制作一个小型图片发布博客,有点像 tumblr,但仅用于发布辛普森一家的图片(用于课堂)。
我正在尝试使用 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="">
图片应该显示在哪里。
我认为这与转换图像以使其可读有关。二进制数据?我只想要存储在数据库中的图像,也许可以重命名它以便于保存。
这是我的上传路径
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
我从 ruby-forum 获得了这段代码,它完成了我认为它会做的所有事情,并把我弹回来,甚至做了一些存储。
这是我的表格:
<form action="/upload" method="post" enctype="multipart/form-data">
<label for="">Upload an Image</label>
<input type="file" name="file" />
<button>Submit</button>
</form>
我有一个帖子数据库的模型(活动记录),列只是帖子的 id、内容和海报的 user_id。
我以前从未尝试过任何类型的上传器,所以我对文件上传存储的方式感到非常困惑。我需要一个新的图像列吗?或者是一张桌子?
对不起,如果这是一个问题,我正在尝试开发我的 Stack Overflow 功能(事实证明这是开发的一个非常重要的部分,以及谷歌搜索)。
【问题讨论】:
-
不是解决方案,但我鼓励您查看文件系统存储或将数据保存在 S3 中。您可以非常快速地收集千兆字节的图像数据,并且在 postgres 二进制文件上管理这些数据的成本可能会比平板磁盘或 s3 高得多。如果这样做,则将对该文件的引用存储在表中,然后从那里读取。查看 Refile gem 以获取有关它们如何实现的示例。
-
我会去检查一下我认为的文件系统存储。我可以将它与heroku一起使用吗?该应用程序需要部署到 Heroku 才能运行,它们是否允许这样的系统?
-
不,你必须像 S3 这样的云存储。他们的文件系统是短暂的。 github.com/refile/refile 载波也可以轻松上传到 s3,但需要更多配置。
标签: ruby image postgresql sinatra