Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Сети > Отсылка файла через Web форму


Автор: cmlwt 22.6.2008, 20:37
Приветствую  Люди помоги пожалуйста  Вот  такая вот  проблема:

Код

       FILE *f = fopen( "C:\\155552.jpg", "wb" );
       if ( f != NULL )
       {
           
           fwrite( content1, file_size, 1, f );  // на это  не обращайте внимания я тут  проверял   нормально  ли считался  файл в content1
           fclose( f );
   

    int len = strlen(content) + file_size + strlen("\r\n--AaB03x\r\n");

    sprintf(tmp, "Content-Length: %d\r\n", len);

    strcat(sendreq, tmp); // шапка полностью
    strcat(sendreq, content); // подшапка
    //strcat(sendreq, content1); // файл

    memcpy( sendreq + strlen(sendreq) ,  content1    , sizeof (content1));

    memcpy( sendreq + strlen(sendreq) ,  "\r\n--AaB03x\r\n", strlen("\r\n--AaB03x\r\n"));
    
    
    //MessageBox (0, sendreq,0,0);
    send(sock, sendreq, sizeof(sendreq), 0);


Проблема заключается в том что  В content1  файл  нормально приходит  (не битый Т.к.  копия полностью  рабочаясоздается)  А вот  на сервер  файл  приходит  битым (содержит  только  первые 4 байта)  Запрос  с txt работает на ура А вот  с бинарниками не хочет работать Подскажите в чем проблема И как ее можно решить

Автор: jonie 22.6.2008, 22:04
Цитата

Код

 memcpy( sendreq + strlen(sendreq) ,  "\r\n--AaB03x\r\n", strlen("\r\n--AaB03x\r\n"));

неверно. strlen тут не даст нормального результата в случае бинарника...

Автор: cmlwt 23.6.2008, 00:34
Цитата(jonie @ 22.6.2008,  22:04)
Цитата

Код

 memcpy( sendreq + strlen(sendreq) ,  "\r\n--AaB03x\r\n", strlen("\r\n--AaB03x\r\n"));

неверно. strlen тут не даст нормального результата в случае бинарника...

Вот оно что  спасиб  переделал  вот так вот 
Код

int cc = 0;
strcat(sendreq, tmp); // шапка полностью
    strcat(sendreq, content); // подшапка
    
    memcpy( sendreq + strlen(sendreq) ,  content1, sizeof (content1));
        cc = strlen(sendreq) + file_size;

    memcpy( sendreq + cc ,  "\r\n--AaB03x\r\n", strlen("\r\n--AaB03x\r\n"));
    
    
    //MessageBox (0, sendreq,0,0);
    send(sock, sendreq, sizeof(sendreq), 0);





Все теперь файл приходит байт в байт как нужно  на сервер (размер  совподает  но битый) Косяк состоит в том что  последняя строчка

Код

memcpy( sendreq + cc ,  "\r\n--AaB03x\r\n", strlen("\r\n--AaB03x\r\n"));


Не входит в POST запрос  в чем проблема не могу сообразить ПОдскажите 


P.S. Все  исправил   нужно было  везде  убрать sizeof   и переделать строчки 

Код

  memcpy( sendreq + strlen(sendreq) ,  content1, sizeof (content1));

в
    memcpy( sendreq + strlen(sendreq) ,  content1, file_size); // где   file_size это  размер нашего бинарника  который мы считали
и

    send(sock, sendreq, sizeof(sendreq), 0);
в
    cc = cc +  strlen("\r\n--AaB03x\r\n");
    send(sock, sendreq, сс , 0);



И все работает  на ура ))  Кому  интересно  посмотреть  полностью ф-цию http://3ona.info/2008/06/23/otsylka-fajjla-cherez-web-formu-chast-2.html

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)