Envio de Arquivos - GLPI

Options
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
05-07-2025 12:24 PM - edited 05-07-2025 12:56 PM
Pessoal, boa tarde!
Estou com um problema para enviar anexos da plataforma ServiceNow para a plataforma GLPI. Pelo POSTMAN tudo funciona as mil maracilhas, mas quando tento fazer de forma interna no ServiceNow, o arquivo até chega do outro lado, mas, sempre está corrompido, ou ainda com o conteúdo escrito UNDEFINED.
Se alguém puder me dar uma mão seria de grande ajuda. Envio abaixo o meu script e as telas do POSTMAN.
var token = '{{token}}';
var record = '{{record}}';
var endpoint = '{{endpoint}}';
var appToken = '{{apptoken}}';
var ticket = '{{ticket}}';
// CARREGA o anexo do registro
var attachmentGR = new GlideRecord('sys_attachment');
attachmentGR.addQuery('table_sys_id', record);
attachmentGR.query();
if(attachmentGR.next()) {
var attachmentName = attachmentGR.file_name.toString();
var attachmentType = attachmentGR.content_type;
}
// CONVERTE conteúdo para binário
var grAttachment = new GlideSysAttachment();
var bytes = grAttachment.getBytes(attachmentGR);
// MONTA o payload multipart
var boundary = "----" + gs.generateGUID().substring(0, 16);
var CRLF = "\r\n";
var payload = "";
payload += "--" + boundary + CRLF;
payload += 'Content-Disposition: form-data; name="uploadManifest"' + CRLF + CRLF;
payload += JSON.stringify({
input: {
name: attachmentName,
_filename: [attachmentName]
}
}) + CRLF;
payload += "--" + boundary + CRLF;
payload += 'Content-Disposition: form-data; name="filename"; filename="' + attachmentName + '"' + CRLF;
payload += "Content-Type: " + attachmentType + CRLF;
payload += bytes;
payload += "--" + boundary + "--" + CRLF;
var request = new sn_ws.RESTMessageV2();
request.setEndpoint(endpoint + '/apirest.php/Document/');
request.setHttpMethod('POST');
request.setRequestHeader("App-Token", appToken);
request.setRequestHeader("Session-Token", token);
request.setRequestHeader("Content-Type", "multipart/form-data; boundary=" + boundary);
request.setLogLevel('all');
request.setRequestBody(payload);
var sentBody = request.getRequestBody();
var response = request.execute();
var responseBody = response.getBody();
var httpStatus = response.getStatusCode();
// Se o erro for de TOKEN, tenta de novo
if (responseBody.includes('SESSION_TOKEN_INVALID')) {
response = request.execute();
httpStatus = response.getStatusCode();
responseBody = response.getBody();
}
var docJSON = JSON.parse(responseBody);
var docID = docJSON.id; // Captura o documento (DOCUMENT ID)
gs.info('RESPONSE BODY: ' + responseBody);
gs.info('HTTP STATUS: ' + httpStatus);
gs.info('DOCUMENT ID: ' + docID);
Por vezes também recebo esta mensagem de erro e, nesse caso, na aé adicionado à plataforma.
{"id":11057,"message":"Item adicionado com sucesso: notepad.txt","upload_result":{"filename":[{"name":"681bb8f71971e2.23658968notepad.txt","size":0,"type":"","error":"O arquivo enviado foi parcialmente enviado","prefix":"681bb8f71971e2.23658968","display":"notepad.txt","filesize":"0 B","id":"docfilename1027737742"}]}}
Labels:
- Labels:
-
Incident Management
0 REPLIES 0