Para envio e download de arquivos utilizando o Mingle payload do Mingle Gateway o arquivo deve ser encodado para BASE64.
Dessa forma é possível enviar arquivos PDF, ZIP, XLS, etc...
Para converter o arquivo para BASE64 e enviá-lo como resposta a uma solicitação GET para download, pode-se utilizar o exemplo em NodeJS abaixo:
Bloco de código | ||||||||
---|---|---|---|---|---|---|---|---|
| ||||||||
let options = { root: path.join(__dirname), }; let buff = fs.readFileSync('arquivo.tar.xz'); let base64data = buff.toString('base64'); res.setHeader("content-type", "application/octet-stream"); res.setHeader('content-disposition', 'attachment; filename=arquivo.tar.xz'); res.end(base64data, options); |
...
Segue abaixo links das documentações de Encode e Decode do Protheus (ADVPL):
Para envio e download de arquivos utilizando a interface formData do Mingle Gateway
Essa interface utiliza o mesmo formato que um form html utilizaria se o tipo de codificação estivesse configurado como "multipart/form-data".
Neste exemplo, recebemos arquivos com qualquer tipo de extensões através do upload no html
Bloco de código | ||||||||
---|---|---|---|---|---|---|---|---|
| ||||||||
<po-upload name="upload" [(ngModel)]="fileUpload"> </po-upload>
<ion-button (click)="sendFilesByMingle(fileUpload)">Direto</ion-button> |
E enviamos com o MingleService no método sendFilesByMingle(fileUpload):
Bloco de código | ||||||||
---|---|---|---|---|---|---|---|---|
| ||||||||
public sendFilesByMingle (file: any) {
const formData: FormData = new FormData();
formData.append('file', file[0].rawFile);
const options = { body: formData };
this.mingleService.gateway.post("api/upload", options).subscribe(res => {
console.log("HTTP RESPONSE OK: ", res)
}), error => {
console.log("HTTP RESPONSE ERROR:", error);
}
} |
Envie o formData através do body usando a classe mingleService.gateway.
Dessa forma os seus arquivos serão enviados para o seu host.
HTML |
---|
<style> div.theme-default .ia-splitter #main { margin-left: 0px; } .ia-fixed-sidebar, .ia-splitter-left { display: none; } #main { padding-left: 10px; padding-right: 10px; overflow-x: hidden; } .aui-header-primary .aui-nav, .aui-page-panel { margin-left: 0px !important; } .aui-header-primary .aui-nav { margin-left: 0px !important; } </style> |