Armazenar arquivos .PDF no MySQL



  • Preciso de uma aplicação que salve arquivos do tipo .pdf em um banco de dados. Criei um campo no banco de dados do tipo BLOB para receber este arquivo, mas não sei como vou passar ele para o banco. Pensei em converte-lo para ByteArray e armazenar no banco, e quando precisar dele faço a conversão de volta para o formato .pdf. Este é um bom caminho? Como posso fazer essa conversão? Existem meios melhores de fazer isso?

    Grato.
    Aguardo resposta.



  • Acredito que o caminho seja esse mesmo.

    Um código mais ou menos assim:

    void test() {
    /* .... */
    QByteArray byte;
        QFile file(filename);
        if(file.open(QIODevice::ReadOnly))
        {
            byte = file.readAll();
            file.close();
        }
    }
    

    e depois

    query.bindValue(":image", byte, QSql::In | QSql::Binary);
    

    Resolva. Mas tome cuidado com o tamanho do arquivo: o readAll() vai colocar o arquivo inteiro na memória.



  • @TioRoy said:

    Entendi, desta forma o arquivo é transformado em bytearray e depois armazenado no banco de dados. E para a recuperação desse arquivo? Como converto o bytearray que vou pegar do banco de dados e transformo em .pdf?



  • Você só precisa recuperar o bytearray e gravar o arquivo com extensão .pdf. Mais ou menos assim:

    if (query.exec( "SELECT blobPDF  from table" )) {
    //.....
    QByteArray outByteArray = query.value( 0 ).toByteArray();
    //...
    }
    


  • @TioRoy

    Certo, consegui fazer funcionar aqui =), minha maior duvida era como conseguir pegar um bytearray e salva-lo em um arquivo pdf, isso resolveu meu problema:

    if(arquivo.open(QIODevice::WriteOnly)){
        arquivo.write(bytearray);
    }
    

    Não achava que algo tão simples fosse funcionar, mas enfim, funcionou. Agora é só fazer mais testes para confirmar que não vai dar problema.

    Obrigado pela ajuda.


Log in to reply
 

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