如何使用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-data
和request
只使用restify / http,但我最终以一个可怕的长代码。