Páginas filhas
  • 5. Exemplos de Utilização

Importante

O conteúdo relacionado na página abaixo foi substituído e será descontinuado em releases futuras.

A nova técnica para desenvolvimento de API poderá ser consultada através do seguinte endereço (http://tdn.totvs.com/x/6BE4Fw) e esta disponível a partir da release 12.1.22 do Logix.

Efetuando Upload de arquivos via Logix REST

O Logix REST suporta o upload de arquivos desde que o conteúdo do arquivo venha com conteúdo texto, pois atualmente o AppServer não suporta o formato multipart. Uma boa prática de desenvolvimento é enviar o conteúdo do arquivo codificado em Base64.

Abaixo segue um exemplo de como efetuar o upload do arquivo no Logix REST via JavaScript e jQuery:

function submitform(event) {
    var file;
    var read;
    var data;
 
    event.preventDefault();
    
    // Recupera o arquivo selecionado no HTML.
    file = $("#fileInput").prop("files")[0];
    
    // Inicia a leitura do arquivo utilizando a API FileReader do HTML5.
    read = new FileReader()
    read.readAsBinaryString(file);
    
    read.onload = function (e) {
        $.ajax({
            type: "POST",
            url: "http://localhost:4440/logixrest/imgr0001/uploadImage",
            headers: {
                "Authorization": "Basic YWRtbG9nOmFkbWxvZw=="
            },
            data: JSON.stringify({
                "image": {
                    "fname": file.name,
                    "fcont": btoa(read.result) // Converte em BASE64
                }
            })
        });
    };
 
    event.preventDefault();
    return false;
}

No exemplo acima é realizada a leitura do conteúdo do arquivo, previamente carregado em um formulário HTML, utilizando a API FileReader do HTML5. Após o término da leitura do arquivo é realizada uma requisição AJAX para a API IMGR0001 método uploadImage do Logix enviando o conteúdo do arquivo codificado em Base64.

No Logix, a API IMGR0001 deverá ficar conforme o exemplo abaixo:

#------------------------------------------------------------------------------#
{/*Protheus.doc*/ imgr0001_pub_process_uploadImage
Método para efeutar upload de imagem via Logix REST.
 
@type function
 
@param image, RECORD, Estrutura contendo informações da imagem.
@return RECORD, Estrutura padrão de retorno do Logix REST.
 
@example O JSON de requisição deverá ser semelhante ao abaixo:
{
    "image": {
        "fname": "Nome da Imagem",
        "fcont": "Conteúdo da Imagem codificado em BASE64"
    }
}
/}
#------------------------------------------------------------------------------#
FUNCTION imgr0001_pub_process_uploadImage(image)
#------------------------------------------------------------------------------#
    DEFINE image RECORD
                     fname CHAR(100),
                     fcont TEXT
                 END RECORD
 
    DEFINE l_handle INTEGER
 
    DEFINE lr_return RECORD
                         status SMALLINT,
                         msg    CHAR(200)
                     END RECORD
 
    INITIALIZE lr_return.* TO NULL
 
    IF  image.fname IS NULL OR image.fcont IS NULL THEN
        LET lr_return.status = FALSE
        LET lr_return.msg = "Imagem não informada."
        RETURN lr_return
    END IF

    LET image.fcont = LOG_decode64(image.fcont CLIPPED)
 
    # Salva a imagem no servidor.
    LET l_handle = LOG_FILE_create("D:\\share\\" || image.fname CLIPPED,0,0)

    IF  l_handle < 0 THEN
        LET lr_return.status = FALSE
        LET lr_return.msg = log0030_mensagem_get_texto()
        RETURN lr_return
    END IF

    IF  NOT LOG_FILE_write(l_handle,image.fcont CLIPPED) THEN
        LET lr_return.status = FALSE
        LET lr_return.msg = "Não foi possível carregar a imagem """|| image.fname CLIPPED ||"""."
    ELSE
        LET lr_return.status = TRUE
        LET lr_return.msg = "Imagem """|| image.fname CLIPPED ||""" carregada com sucesso."
    END IF

    CALL LOG_FILE_close(l_handle)

    RETURN lr_return
END FUNCTION

Limite de tamanho de arquivo

Lembre-se que o arquivo não pode ultrapassar o limite definido no AppServer através da chave MAXSTRINGSIZE que vai de 1mb até 500mb .

  • Sem rótulos