Взаимодействие С++ и cgi/perl
От: bigm  
Дата: 27.08.03 20:44
Оценка:
Мне необходимо закачать бинарный файл на сервер из своей программы через HTTP...(FTP не подходит)
Использую WinInet. делаю Post запрос.
На сервере работает Perl скрипт, который считывает данные и сохраняет в файл.
Дело в том, что размер файла после закачки не совпадает с размером исходного файла.
Как этого избежать?
ЗАРАНЕЕ СПАСИБО

28.08.03 10:09: Перенесено модератором из 'C/C++' — ПК
Re: Взаимодействие С++ и cgi/perl
От: beut  
Дата: 28.08.03 01:10
Оценка:
Здравствуйте, bigm, Вы писали:

B>Мне необходимо закачать бинарный файл на сервер из своей программы через HTTP...(FTP не подходит)

B>Использую WinInet. делаю Post запрос.
B>На сервере работает Perl скрипт, который считывает данные и сохраняет в файл.
B>Дело в том, что размер файла после закачки не совпадает с размером исходного файла.
B>Как этого избежать?
B>ЗАРАНЕЕ СПАСИБО

Дай угадаю — он становится меньше?
Проверь, правильно ли ты качаешь файл на сервер. Сервер может менять концы строк в коде запроса. Если в запросе спрятан передаваемый файл, то и, соответственно, в нём. Скрипт должен принимать информацию специфическим образом:

use CGI;
use Fcntl;                                   
use CGI       qw (:standard);                
use CGI::Carp qw (fatalsToBrowser);          
$CGI::POST_MAX = 131072;                     


if ($ENV{'CONTENT_TYPE'} =~ m#^multipart/form-data#) {
@fields = ('file', 'text');
foreach $field (@fields)
{ $in{$field} = param($field);}
}

$file=param('file');

$file !~ /([\w-]+ \. (?: gif | jpe?g ))$/ix;

open OUT, ("> _pic/$1") or print "Файл не может быть открыт";
binmode(OUT);
# читаем входной поток и пишем в файл (файл в binmode!!!)
while(<$file>){
print OUT $_; 
} 
close(OUT); 


exit;


Причём данные должны передаваться в формате enctype="multipart/form-data"
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.