簡體   English   中英

如何使用restify上傳文件

[英]How to upload file using restify

我正在嘗試使用Restify模塊將圖像文件上傳到Rest服務器(Confluence更具體),但是收到Assertion錯誤。 我不確定我是否使用正確的方法將文件上傳到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

throw new assert.AssertionError({
        ^
AssertionError: body
    at Object.module.exports.(anonymous function) [as ok] (c:\Users\abc\myproj\node_modules\restify\node_modules\assert-pl
us\assert.js:242:35)
    at JsonClient.write (c:\Users\abc\myproj\node_modules\restify\lib\clients\json_client.js:31:12)
    at ReadStream.ondata (_stream_readable.js:540:20)
    at ReadStream.emit (events.js:107:17)
    at readableAddChunk (_stream_readable.js:163:16)
    at ReadStream.Readable.push (_stream_readable.js:126:10)
    at onread (fs.js:1683:12)
    at FSReqWrap.wrapper [as oncomplete] (fs.js:529:17)

我正在努力發送包含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
  • node @ 6.11.1

我嘗試不使用庫form-datarequest只使用restify / http但我最終得到了一個可怕的長代碼。

要發送multipart/form-data ,您必須使用除restify之外的庫,因為它不支持Content-Type

你可以使用request里面確實有支持multipart/form-data內置的HTTP請求。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM