为了将我的文档工作发布在Confluence页面上,我正在努力尝试将PNG图片上传到网站。
我能够使用Python请求完美地做到这一点,但我需要使用Nashorn JavaScript才能自动从设计工具上传此图像
POST实际上起作用,并且图像已上传(HTTP返回码200)。 不幸的是,上载的图像二进制代码与原始文件不匹配。 我怀疑是字符集转换问题,但是作为JavaScript的新手,我没有成功解决它。
我试图强制使用其他字符集设置,但没有成功...
这是代码段。它会引起社区的一些建议吗?
谢谢 泽维尔
function httpSendImage(method, theUrl, files, headers) {
method = method || 'POST';
lineEnd = '\r\n';
twoHyphens = '--';
boundary = '***232404jkg4220957934FW**';
var existingFileName = '';
maxBufferSize = 1 * 1024 * 1024;
// Post Client request
try {
var con = new java.net.URL(theUrl).openConnection();
con.doOutput = true;
con.doInput = true;
con.useCaches = false;
con.requestMethod = method;
con.setRequestProperty('Connection', 'Keep-Alive');
con.setRequestProperty(
'Content-Type',
'multipart/form-data;boundary=' + boundary
);
var filesData = '';
if (files != undefined) {
for (var prop in files) {
if (prop === 'filename') {
existingFileName = files[prop];
fileparts = existingFileName.split('\\');
files[prop] = fileparts[fileparts.length - 1];
}
filesData += prop + '="' + files[prop] + '"; ';
}
filesData = filesData.substring(0, filesData.length - 2);
}
if (headers != undefined) {
for (var prop in headers) {
con.setRequestProperty(prop, headers[prop]);
}
}
if (authorization != null) {
con.setRequestProperty('Authorization', authorization);
}
var dos = new java.io.DataOutputStream(con.outputStream);
var buf = Java.type('byte[]');
dos.writeBytes(twoHyphens + boundary + lineEnd);
dos.writeBytes(
'Content-Disposition: form-data; name="file"; ' +
filesData +
'\nContent-Type: image/png; charset=utf-8' +
lineEnd
);
dos.writeBytes(lineEnd);
// write bytes into form...
buf = readFile(existingFileName);
// console.log('buf length: ' + buf.length);
dos.writeBytes(buf);
// send multipart form data necesssary after file data...
dos.writeBytes(lineEnd);
dos.writeBytes(twoHyphens + boundary + twoHyphens + lineEnd);
// close streams
dos.flush();
dos.close();
return asResponse(con);
} catch (err) {
console.log('Error sending file: ' + err.message);
}
}