Модераторы: Snowy, Poseidon, MetalFan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> кодирование в base 64, upload файлов на сервер 
:(
    Опции темы
teplotaya
Дата 15.7.2006, 23:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 46
Регистрация: 10.3.2006

Репутация: нет
Всего: 2






Код


function EncodeBase64(Value: String): String;
const
 b64alphabet: PChar = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';
  pad: PChar = '====';


  function EncodeChunk(const Chunk: String): String;
  var
    W: LongWord;
    i, n: Byte;
  begin
    n := Length(Chunk); W := 0;
    for i := 0 to n - 1 do
      W := W + Ord(Chunk[i + 1]) shl ((2 - i) * 8);
    Result := b64alphabet[(W shr 18) and $3f] +
              b64alphabet[(W shr 12) and $3f] +
              b64alphabet[(W shr 06) and $3f] +
              b64alphabet[(W shr 00) and $3f];
    if n <> 3 then
      Result := Copy(Result, 0, n + 1) + Copy(pad, 0, 3 - n);   //add padding when out len isn't 24 bits
  end;

begin
  Result := '';
  while Length(Value) > 0 do
  begin
    Result := Result + EncodeChunk(Copy(Value, 0, 3));
    Delete(Value, 1, 3);
  end;
end;



procedure TForm1.Button1Click(Sender: TObject);
var
StringStream: TStringStream;
PostVars: TStringList;
FileStream: TFileStream;
begin
PostVars := TStringList.Create;
StringStream := TStringStream.Create('');
FileStream := TFileStream.Create('C:\tatu.jpg', fmOpenRead or fmShareDenyWrite);
try
IdHTTP1.Connect;
StringStream.CopyFrom(FileStream, FileStream.Size);
PostVars.Values['file'] := EncodeBase64(StringStream.DataString);
IdHTTP1.Post('http://www.domain.de/upload/upload.php?pDatei=tatu.jpg', PostVars, StringStream);
finally
StringStream.Free;
PostVars.Free;
FileStream.Free;
end;
end;




upload.php:
Код


$datei = base64_decode($file);
$fp = fopen($HTTP_GET_VARS['pDatei'], "w");
fwrite($fp, $datei);
fclose($fp);




ничего не получается. в чем трабл ?


данные нормально поступают в mime на сайт. патом я их перекодирую обратно
base64_decode($file);
после перекодировки файл на ~1% по размеру становится меньше и не открывается smile
(pad: PChar = '===='; - что это ?)
если pad: PChar = ''; так что раскодирование происходит но 
все равно файл получается некоррректный
в чем же дело ?
может кто знает альтернативную функцию кодирования jpeg в base 64 ?

имо может я что то криво делаю ?
   

 

Это сообщение отредактировал(а) teplotaya - 16.7.2006, 03:40
PM MAIL   Вверх
Mechanic
Дата 16.7.2006, 22:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 228
Регистрация: 5.5.2006
Где: Kharkov, Ukraine

Репутация: нет
Всего: 7



Цитата(teplotaya @  15.7.2006,  23:02 Найти цитируемый пост)
StringStream.CopyFrom(FileStream, FileStream.Size);

Вот тут собака порылась. Оно копирует до первого нуля в данных.
Используй другие методы.

Погляди сюда: Как преобразовать файл в строку(Файл бинарный)? 
--------------------
Tell me the extensions of the files You backup and I'll tell You who You are..  ©Mch  
PM   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Сети"
Snowy
Poseidon
MetalFan

Запрещено:

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делится вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи

Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Snowy, Poseidon, MetalFan.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Сети | Следующая тема »


 




[ Время генерации скрипта: 0.0383 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.