无法使用POST请求和JavaScript Nashorn正确上传PNG图片

时间:2019-02-23 16:13:32

标签: javascript image http post nashorn

为了将我的文档工作发布在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);
  }
}

0 个答案:

没有答案