2017-10-31 4 views
0

Datei Hochladen mit multer geschieht nichtHochladen von Bildern von einem Server zum anderen in NodeJS

Mein Code:

Datei von HTML lesen und weitergeben an externe URL

router.post('/fileUpload',function (req,res) { 
    request({ 
      uri: http//example.com/upload, // url of other server 
      method: "POST", 
      form: { 
        "name":req.body.name, 
        "image":? //image from html - no idea how to pass the req.files here 
        } 
        }, function (error, response, body) { 
         ------------ 
         ------------ 
         } 
       }); 

andere url Server : /example.com/upload

Dies ist der Code zum Hochladen von Bildern mit Multer

app.post('/upload',function(req,res){ 

    var storage = multer.diskStorage({ 
    destination: function (req, file, callback) { 

     callback(null, 'uploads'); 
    }, 
    filename: function (req, file, callback) { 
     callback(null, file.fieldname + '-' + Date.now()); 
    } 
}); 

    var upload = multer({ storage : storage }).array('productImage'); 
     upload(req,res,function(err) { 

      if(err) { 
       return res.json({'success':0,'result':{},'errorMessage':'Unknown Error'}); 
      } 
      return res.json({'success':1,'result':{},'errorMessage':''}); 
     }); 
    }); 

Antwort

1

Erstellen Sie readStream aus der hochgeladenen Datei und pipe es auf den anderen Server.Klicken Sie auf diesen Link https://www.npmjs.com/package/request, Sie werden dies leicht tun.

0

Die einfache Antwort wäre, einen Read-Stream aus der hochgeladenen Datei und eine Pipe an den zweiten Server zu erstellen, etwa so:

fs.createReadStream(req.files[0].path).pipe(request.post('http//example.com/upload'))

Allerdings gibt es viele Möglichkeiten, diese Arbeit zu machen . Am effizientesten ist es, einen binären Stream vom ersten Upload bis zum zweiten Server zu verwenden. Sie möchten vermeiden, Ihren ersten Server als Speicher für alle Uploads zu verwenden.

Hier ist, wie ich es stattdessen tun würde:

Verwenden jQuery-Datei-Upload auf Client-Seite laden $ ('# Fileupload') (oder jede andere Bibliothek/Ansatz, um die Raw-Binary-Stream zu laden). Fileupload ({ url: 'https://server1.com/upload' })

Verwenden Formidable (oder einer anderen Bibliothek wie multer) Upload serverseitige zu handhaben (Dies ermöglicht es Ihnen, den binären Strom in Teilen zu lesen, und behandeln jedes Teil, wie es kommt) app.post ('/ upload', Funktion (req, res)) { var Form = neue formidable.IncomingForm();

form.parse(req); 

    form.onPart = function(part) { 
     fs.createReadStream(part).pipe(request.post('http//example.com/upload')) 
    } 
} 

Wenn jeder Teil des binären Hochladen empfangen wird, kann man an den zweiten Server über Leitung(), um die binären direkt streamen es zu vermeiden, was auch immer auf dem ersten Server zu speichern.

Der Schlüssel zu dieser Arbeit ist es, den Datei-Upload und die Übertragung als Stream von Binär-Bits zu betrachten. Wenn der Benutzer eine Datei hochlädt (req.body), möchten Sie einen Lesestream aus der Datei erstellen und die Binärdatei über die request.post() leiten.

Verwandte Themen