[Ajuda] Servidor http no Qt nao envia imagem



  • Fiz um servidor http usando o Qt, mas ele nao esta enviando imagens, pois nao consegue abrir o arquivo de imagem...

    segue o trecho do codigo onde o erro acontece:

    @
    QString dir = "/home/meussites"+list.at(1);

    QFileInfo fileInfo( dir );
    if ( fileInfo.isDir() )
        dir+="index.html";
    
    QFile file(dir);
    qDebug(&#41;<<dir;
    QString sufix=fileInfo.suffix();
    
    if(sufix.compare("jpg")== 0)sufix = "image/jpeg";
    else if(sufix.compare("gif")== 0)sufix = "image/gif";
    else if(sufix.compare("png")== 0)sufix = "image/png";
    else if(sufix.compare("ico")== 0)sufix = "image/x-icon";
    
    else if(sufix.compare("htm")== 0)sufix = "text/html";
    else if(sufix.compare("html")== 0)sufix = "text/html";
    else if(sufix.compare("css")== 0)sufix = "text/css";
    else if(sufix.compare("js")== 0)sufix = "text/javascript";
    
    else if(sufix.compare("au")== 0)sufix = "audio/basic";
    else if(sufix.compare("wav")== 0)sufix = "audio/wav";
    else if(sufix.compare("mp3")== 0)sufix = "audio/mp3";
    
    
    else if(sufix.compare("avi")== 0)sufix = "video/x-msvideo";
    else if(sufix.compare("mpeg")== 0)sufix = "video/mpeg";
    
    //aqui acontece o erro
    if (!file.open(QFile::ReadWrite ))
    {
        qDebug()<<"error ao abrir o arquivo:"<<dir;
        QString resposta ="HTTP/1.1 404 OK\r\n";
        QString cabecalho= resposta+"\r\n";
    
        int erro = tcpSocket->write(cabecalho.toLocal8Bit(),cabecalho.toLocal8Bit().count());
    
    }else
    

    @

    tentei abrir ele como arquivo binario mas mesmo assim deu erro...

    Preciso transformar a imagem em uma Stream para enviar ao navegador...

    desde já agradeço a ajuda....



  • Qual é o erro que apresenta?

    Para ler binário, use o QDataStream, mais ou menos assim (não testei):

    @
    QFile file("image.jpg");
    if (!file.open(QIODevice::ReadOnly))
    return;

    int size = file.size(); //Não é a melhor maneira.... o arquivo pode ser muito grande para alocar....
    char *buffer = new char[size];

    QDataStream in(&file);
    in.readRawData(buffer, sizeof(buffer));
    @



  • entao,eu tentei usar o QDataStream para abrir ele como binario, mas na hora que faco file.open() ele da um erro. esse 'e omeu problema... ele ao quer abrir a imagem...



  • Mas qual é o erro?



  • erro 5, quando eu uso file.error()....

    a referencia do erro eh: The file could not be opened.



  • bq. @QString dir = "/home/meussites"+list.at(1);@

    O retorno do list.at(1) é o nome do arquivo?

    Não seria assim?

    @
    QString dir = "/home/meussites/"+list.at(1);
    @



  • nao, pq o GET que o navegador envia ja tem a /.

    o servidor ta funcionando, enviando arquivos de texto... mas nao envia imagens pq antes de envia-la para um QTextStrean ou QDataStrean ele da erro na hora que eu mando abrir.



  • Pra ser mais especifico, estava testando aqui, ele nao esta abrindo imagens do tipo png e .ico...



  • Entendi.

    Sei que parecem perguntas idiotas, mas já checou a permissão dos arquivos? Você já trocou de "ReadWrite" para "ReadOnly"? O nome dos arquivos (maiúsculo/minusculo) estão batendo?



  • so nao chequei a permissao dos arquivos... vou checar e te falo



  • alterei as permissoes e continua insistindo em nao ler o arquivo....

    vou postar o codigo completo mais tarde pra vc dar uma olhada pra mim... se puder e claro...



  • Pode mandar.


Log in to reply
 

Looks like your connection to Qt Forum was lost, please wait while we try to reconnect.