javascript将本地文件发送到api

时间:2018-05-14 17:09:25

标签: javascript jquery node.js electron

我正在开发一个电子应用程序,它必须调用api来替换(更新)服务器中的文件X,这是我计算机中的文件Y. 用户从服务器下载文件X以进行编辑,(此文件将在我的计算机中命名为文件Y)。 当用户完成编辑文件Y时,我检查文件X和Y是否是不同的并且我调用api以便用文件Y替换文件X.在调用api之前我不需要将文件Y放在表单中,我希望没有形式。 只有我的请求有效负载与我期望的有效负载不同,我的请求标头中没有问题

我希望有类似的东西what i expect 我明白了 what i get

这是我做的事情

 const fs = require('fs');
  let fileY = fs.readFileSync(path.resolve('gitignore.txt'));
  let form = new FormData();
  form.append("type", "jur_document");
  form.append("file", fileY, 'gitignore.txt');
  form.append("saveActionType", "SAVEMAJOR");
  form.append("attributes", "MIMETYPE=text/plain");

  let settings = {
    "async": true,
    "url": `${Constante.URL}/documents`,
    "method": "POST",
    "type": "POST",
    "headers": {
      // "Content-Type": "text/plain",
      "Authorization": sessionStorage.getItem('authorization')
    },
    "processData": false,
    "contentType": false,
    "mimeType": "multipart/form-data",
    "data": form
  };

  $.ajax(settings)
    .done((response) => {
      console.log(response);
    }).fail(err => {
      console.log(err);
    });
}

1 个答案:

答案 0 :(得分:0)

我终于得到了解决方案 我读了我的文件并创建了一个用于重新创建文件的blob

  const fs = require('fs');
  let buffer = fs.readFileSync(`${app.getAppPath()}/test.txt`);
  let fileY = new File([new Uint8Array(buffer)], 'test.txt', {
    type: 'text/plain'
  });

  form.append("file", fileY);

这里是ajax设置

  let settings = {
    "url": `${Constante.URL}/documents`,
    "type": "POST",
    "headers": {
      "Authorization": sessionStorage.getItem('authorization')
    },
    "processData": false,
    "contentType": false,
    "data": form
  };