我有一个轴摄像头,它将数据发送到我给它的地址。我希望它将数据发布到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的好库?
答案 0 :(得分:0)
Rails不使用带有stdin / stdout等的CGI接口。可以在request.body
中找到已提交请求的正文,因此在上面更改STDIN.read
到request.body.read
并且您应该没事。