Rails POST Content-type = image / jpeg

时间:2011-04-20 08:25:56

标签: ruby-on-rails paperclip

我有一个轴摄像头,它将数据发送到我给它的地址。我希望它将数据发布到rails应用程序,但我还没有找到任何如何做到这一点的示例。我必须处理的唯一信息是post请求的标头。我拉出了一些东西,但这就是我得到的:

REQUEST_METHOD = POST
QUERY_STRING = 
CONTENT_TYPE = image/jpeg
DOCUMENT_ROOT = /var/www/staging/public
REQUEST_URI = /camera/1/images?
SCRIPT_NAME = 
PATH_INFO = /camera/1/images
HTTP_CONTENT_DISPOSITION = attachment; filename="image09-12-16_21-16-28-90.jpg"
_ = _

据我所知,请求本身包含JPEG图像。

Axis将以下内容发布为CGI脚本以保存图像。它有效,但我希望它成为我的Rails应用程序的一部分:

#!/usr/bin/perl -w
my $upload_dir = "/var/www/cgi-bin/upload/";

print "Content-Type: text/plain\r\n\r\n";
print "Upload OK\r\n";

my $file_name = $ENV{'HTTP_CONTENT_DISPOSITION'};
$file_name =~ s/^attachment; filename=\"(.*)\"$/$1/;

open (IMG_FILE, "> $upload_dir$file_name") or die "can't open >$upload_dir$file_name";
binmode(IMG_FILE);
while (<STDIN>) {

print IMG_FILE $_;

}
chmod 0666, "$upload_dir$file_name";

exit 0;

因此文件名在ENV {'HTTP_CONTENT_DISPOSITION'}中,这在标题和示例代码中都很清楚。从perl脚本看来,图像数据似乎都包含在STDIN中。我在rails中尝试了以下内容:

imagefile = File.new("test_file.jpg","w+")
imagefile << STDIN.read
imagefile.close

但它不起作用。文件test_file.jpg是空的。

我有什么使命吗?有谁知道如何将请求数据保存为文件?

有没有人知道任何允许从Axis网络摄像头上传http的好库?

1 个答案:

答案 0 :(得分:0)

Rails不使用带有stdin / stdout等的CGI接口。可以在request.body中找到已提交请求的正文,因此在上面更改STDIN.readrequest.body.read并且您应该没事。