У меня есть осевая камера, которая ПОСТАВЛЯЕТ данные на адрес, который я им даю. Я бы хотел разместить данные в приложении rails, но я не нашел примеров того, как это сделать. Единственная информация, с которой мне приходится работать - это заголовок запроса на публикацию. Я вытащил несколько вещей, но вот что я получил:
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. Я попробовал следующее в рельсах:
imagefile = File.new("test_file.jpg","w+")
imagefile << STDIN.read
imagefile.close
но это не сработало. Файл test_file.jpg был пуст.
Есть ли что-нибудь, что я являюсь миссией? Кто-нибудь знает, как сохранить данные запроса в виде файла?
Кто-нибудь знает о каких-либо хороших библиотеках, позволяющих загружать http с веб-камер Axis?