Rails POST Content-type = image / jpeg - PullRequest
       0

Rails POST Content-type = image / jpeg

1 голос
/ 20 апреля 2011

У меня есть осевая камера, которая ПОСТАВЛЯЕТ данные на адрес, который я им даю. Я бы хотел разместить данные в приложении 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?

1 Ответ

0 голосов
/ 27 июня 2011

Rails не использует интерфейс CGI с stdin / stdout и т. Д. Тело отправленного запроса можно найти в request.body, поэтому в приведенном выше изменении измените STDIN.read на request.body.read, и с вами все будет в порядке.

...