Показать сообщение отдельно
  #21  
Старый 13.03.2012, 22:48
Snake22 Snake22 вне форума
Активный
 
Регистрация: 20.02.2011
Сообщения: 374
Репутация: 744
По умолчанию

Решил делать немного по другому.не буду заморачиваться,вобщем сохранение происходит теперь так:
получаю от браузера в строковом виде все данные(имя файла,post запрос и тд),в том числе в строке приходит и сам файл в бинарном виде.
с помощью boundary метки ищу позицию начала и конца бинарного кода файла в тексте,и сохраняю,но при таком сохранении очень много оперативной памяти тратится особенно если файл большой.
весь файл вначале загружается в память,а с моим условием сохранения используемаяпамять увеличивается вдвое.
Код:
//передаём в StringStream чтоб передать в MemoryStream для сохранения
ass:=TStringStream.Create(Copy(ARequestInfo.FormParams,x,y-x)); //х,y - начало и конец бинарного файла в строке
ARequestInfo.free;//освобожд. чтоб уменьшить расход памяти
PostedFile := TMemoryStream.Create;
PostedFile.LoadFromStream(ass);//передаём в MemoryStream для сохранения
ass.Free;
PostedFile.SaveToFile(flname);//сохраняем
PostedFile.Free;
И как можно упростить данный алгоритм чтоб не использовать дублирование? может както указатель передать в MemoryStream и сразу сохранять? без "пузырьков"

и вообще,неужто idhttp такой ущербный,что нельзя файл во время приема в реальном времени сейвить на диск??
ну и Как проверить размер перед отправкой?
Ответить с цитированием