You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

ServiceNow中通过REST导入导出Word文件时文件损坏问题求助

ServiceNow与OpenText间Word文件REST迁移问题

需求与问题概述

  • 需通过REST接口将Word/.docx文件从OpenText导入ServiceNow,再导出回OpenText(无本地操作权限,仅能在ServiceNow端开发)
  • 导出时直接将响应体放入multipart请求会导致文件损坏,推测是ServiceNow服务端ES5 JavaScript的字符串编码处理问题
  • 限制:ServiceNow服务端JS仅支持ES5,无Node.js、File/FileReader类,仅能获取文件内容的字符串形式
  • 验证:已通过PowerShell确认OpenText端无问题,问题出在ServiceNow侧,当前版本为Washington补丁8

当前导出请求代码示例

var r2 = new sn_ws.RESTMessageV2(<REST Message>, <Method>);
r2.setRequestHeader('Content-Type', 'multipart/form-data;boundary=--xxx');
var boundary = '--xxx';
var body = '--' + boundary + '\r\nContent-Disposition: form-data; name="file"; filename="file.docx"\r\nContent-Type: application/vnd.openxmlformats-officedocument.wordprocessingml.document\r\n\r\n' + fileContentStr + '\r\n' + '--' + boundary + '--';
r2.setRequestBody(body);
var response2 = r2.execute();
var responseBody = response2.getBody();

已尝试的编码处理方案

  1. 字符映射转换
var result = [];
for (var i = 0; i < responseBody.length; i++) {
       var charCode = responseBody.charCodeAt(i);
       result.push(charmap[charCode] || charCode);
}
fileContentStr = String.fromCharCode.apply(null, result);
  1. ISO-8859-15编码转字节再转字符串
var fileBytes = responseBody.getBytes('ISO-8859-15'); //ISO 8859-15
    
var fileContentStr = '';
for (var i = 0; i < fileBytes.length; i++) {
       fileContentStr += String.fromCharCode(fileBytes[i]);
}
  1. 截取字符低8位转字节再转字符串
var fileBytes = [];
for (var i = 0; i < responseBody.length; i++) {
      fileBytes.push(responseBody.charCodeAt(i) & 0xff);
}
fileContentStr = String.fromCharCode.apply(null, fileBytes);

寻求解决方案

现需找到能在ServiceNow端实现该文件导入导出功能的可行方案。

内容的提问来源于stack exchange,提问作者Niklas

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.15 20:22:41