从 Electron 应用程序发出多部分 POST 请求以进行文件上传

Posted

技术标签:

【中文标题】从 Electron 应用程序发出多部分 POST 请求以进行文件上传【英文标题】:Issue multipart POST request from Electron app for file upload 【发布时间】:2016-10-31 10:51:31 【问题描述】:

我需要将文件从我的 Electron 应用程序上传到 Web 应用程序 (node.js + Express),首先收集元数据以及所选文件(来自 Electron 应用程序中的 html 表单)并发出 POST对 Web 应用程序的请求。 Web 应用程序通过将文件保存到磁盘上的预配置位置以及保存文件的元数据和路径到数据库来处理此请求。参考 SO,我决定使用 request 和 form-data 将请求与表单数据组合并发出 POST 请求,使用如下代码:

var fs = require('fs');
var request = require('request');
var FormData = require('form-data');

let formData = 
    'name': imageName,
    'mediaType': mediaType,
    'extension': extension,
    'resolution.x': resolutionX,
    'resolution.y': resolutionY,
    'url': url,
    'file': fs.createReadStream(absFilePath)
  ;

  request.post(
    url: 'http://localhost:8080/images',
    formData: formData
  , function(err, response, body) 
    if (err) 
      return console.error('upload failed:', err);
    
    console.log('Server responded with:', response);
  );

在 Electron 应用程序中,控制台显示服务器响应:[IncomingMessage],响应状态码为 500。这很混乱,我无法掌握这两个项目的 Github 页面中的示例。如何发出 POST 请求以实现上述目标?

【问题讨论】:

【参考方案1】:
npm install -S request eyespect

.

var inspect = require('eyespect').inspector();
var request = require('request')

var postData = 
  name: 'test',
  value: 'test'


var url = 'https://www.example.com'
var options = 
  method: 'post',
  body: postData,
  json: true,
  url: url

request(options, function (err, res, body) 
  if (err) 
    inspect(err, 'error posting json')
    return
  
  var headers = res.headers
  var statusCode = res.statusCode
  inspect(headers, 'headers')
  inspect(statusCode, 'statusCode')
  inspect(body, 'body')
)

【讨论】:

以上是关于从 Electron 应用程序发出多部分 POST 请求以进行文件上传的主要内容,如果未能解决你的问题,请参考以下文章

在同一本地网络上从计算机向手机发出 POST 请求

electron

如何捕获从 MFC Web 浏览器 C++ 发出的 GET/POST 请求

用于向 Web 服务发出 http post 请求的多线程

-处理多窗口 | Electron实战

用electron开发了一个屏幕截图工具