如何使用restify上传文件

我试图上传图像文件rest服务器(Confluence更具体)使用Restify模块,但得到断言错误。 我不确定是否使用正确的方法将file upload到REST服务器。 任何人都可以指出我正确的方向吗?

这是我的尝试 –

var restify = require('restify'); var header = {'Authorization': 'Basic xxxxx', 'content-type': 'multipart/form-data'}; var client = restify.createJsonClient({ url: 'http://www.testsite.com', version: '*', headers: header }); var image = "c:\\Users\\abc\\Documents\\bbb.jpg"; var fileStream = fs.createReadStream(image); var stat = fs.statSync(image); var size = stat["size"]; var param = "?pageId=123&filename=mynewimage&mimeType=image%2Fjpeg&size=" + size; fileStream.pipe( client.post("/plugins/drag-and-drop/upload.action"+param, function(err, req, res, obj) { if (err) { return err; } }) ); 

更新:

这是一个assert.js:86断言错误

抛出新的assert.AssertionError({
         ^
 AssertionError:body
     (匿名函数)[可以](c:\ Users \ abc \ myproj \ node_modules \ restify \ node_modules \ assert-pl)在Object.module.exports。
我们\ assert.js:242:35)
    在JsonClient.write(c:\ Users \ abc \ myproj \ node_modules \ restify \ lib \ clients \ json_client.js:31:12)
    在ReadStream.ondata(_stream_readable.js:540:20)
    在ReadStream.emit(events.js:107:17)
     at readableAddChunk(_stream_readable.js:163:16)
    在ReadStream.Readable.push(_stream_readable.js:126:10)
    在读(fs.js:1683:12)
    在FSReqWrap.wrapper [as oncomplete](fs.js:529:17)

要发送multipart/form-data ,您将不得不使用restify以外的库,因为它不支持Content-Type

您可以使用支持内置multipart/form-data http请求的请求。

我正在努力发送包含multipart/form-data请求,并使用restify 5在API上处理此请求。 以下@mscdex答案我想出了处理这两种情况下面的代码:

 "use strict" const restify = require('restify'), plugins = require('restify-plugins'), fs = require('fs'), request = require('request'), FormData = require('form-data'); var server = restify.createServer(); server.use(plugins.multipartBodyParser()); // Enabling multipart // Adding route server.post('/upload', (req, res, next) =>{ /** * Processing request containing multipart/form-data */ var uploaded_file = req.files.mySubmittedFile; // File in form //Reading and sending file fs.readFile(uploaded_file.path, {encoding: 'utf-8'}, (err, data)=>{ // Returning a JSON containing the file's name and its content res.send({ filename: uploaded_file.name, content: data }); next() }); }); // Launching server at http://localhost:8080 server.listen(8080, start); // Client request function start(){ // Making a request to our API using form-data library // Post file using multipart/form-data var formData = { mySubmittedFile: fs.createReadStream('/tmp/hello.txt') } request.post({'url': 'http://localhost:8080/upload', formData: formData}, function(err, res, body){ console.log("Response's body is: "+ body); }); } 

使用:

  • form-data@2.2.0
  • request@2.81.0
  • restify@5.0.1
  • restify-plugins@1.6.0
  • 节点@ 6.11.1

我试过不使用库form-datarequest只使用restify / http,但我最终以一个可怕的长代码。