Загрузка файла HTTP с помощью node.js меняет файл - PullRequest
0 голосов
/ 23 мая 2018

У меня проблема с загрузкой файла jpg с node.js на мой сервер tomcat - где-то при загрузке содержимое файла изменяется.Я думаю, что-то с кодировкой, но я понятия не имею, что мне не хватает.

Код node.js:

var agentOptions;
var agent;

agentOptions = {
  host: 'this.is.my.server'
, port: '8443'
, path: '/'
, rejectUnauthorized: false
};

agent = new https.Agent(agentOptions);

var binaryFilename = "image.jpg";
var fContent = fs.readFileSync( binaryFilename );    
console.log( "file size =  " + fContent.length );

var boundary = '69b2c2b9c464731d'
var content = "--"+boundary+"\r\n"
        + "Content-Disposition: form-data; name=\"file\"; filename=\"image.jpg\"\r\n"
        + "Content-Type: application/octet-stream\r\n"
        + "Content-Transfer-Encoding: BINARY\r\n"
        + "\r\n"
        + fContent + "\r\n"
        + "--"+boundary+"--\r\n"

postOptions = {
    headers: {
      'Content-Type': 'multipart/form-data; boundary='+boundary ,
      'Content-Length': Buffer.byteLength(content) ,
      'Authorization': 'Basic ABCEDFE..' 
    } ,

    host: 'this.is.my.server' ,
    port: '8443' ,
    path: '/restservices/uploadimage?data=value&data2=value2' ,
    method: 'POST' ,
    strictSSL: false ,
    agent: agent
} ; 

// Set up the request
post_req = https.request(
    postOptions, 
    function(res) {
        // 
      res.setEncoding('utf8') ;

      res.on('data', function (chunk) {
          console.log('Response: ' + chunk) ;
      }) ;

    }) ;

// post the data
post_req.write(content) ;
post_req.end() ;

Java-код на сервере начинается с

@RequestMapping(value = "/uploadimage", method = RequestMethod.POST )
public @ResponseBody String uploadpreview(@RequestParam String data, @RequestParam String data1, @RequestParam("file") MultipartFile file) {
    if (!file.isEmpty()) {
        ....

Начало изображения перед загрузкой: image before upload

Начало изображения после загрузки: image before upload

Каждый байт с наибольшим установленным битом преобразуетсядо трех байтов EF BF BD

Я перепробовал несколько вещей, может быть, я упускаю что-то простое - на данный момент я понятия не имею, что я делаю неправильно.

Спасибо за любые идеи ичаевые

Клаус

1 Ответ

0 голосов
/ 23 мая 2018

Вот еще одна попытка:

const https = require('https');
const formData = require('form-data')();

var binaryFilename = process.argv[2] || 'image.jpg';

let request = https.request({
    host: 'this.is.my.server'
    port: '8443',
    path: '/',
    method: 'POST',
    headers: formData.getHeaders()
}, (res) => {
    res.on('data', (data) => {
       console.log('Data received: ', data.toString()); 
    });
});

request.on("error", (e) => {
    console.error(e);
});

formData.append('image_file', require("fs").createReadStream(binaryFilename));
formData.pipe(request);
...