2016-04-05 21 views
1

yılında POST ile iki dosya yükleme:Python içinde aşağıdaki kodu var node.js

import requests 
fileslist = [('file[]',('user_query.txt', open('user_query.txt', 'rb'), 'text/plain')), 
       ('file[]',('wheatData.csv', open('wheatData.csv', 'rb'), 'text/csv')),] 

r = requests.post('url', 
    files=fileslist) 

Ve ben bir node.js sürüme dönüştürmek çalışıyorum. Şimdiye kadar sahibim:

var request = require('request'); 
var fs  = require('fs'); 

var req = request.post(url, function (err, resp, body) { 
    if (err) { 
    console.log('Error!'); 
    } else { 
    console.log(body); 
    } 
}); 

var form = req.form(); 
form.append('wheatData.csv', fs.createReadStream('wheatData.csv')); 
form.append('user_query.txt', fs.createReadStream('user_query.txt')); 

Neyi yanlış yapıyorum?

+0

Bir hata mesajı aldınız ve eğer öyleyse hata tam olarak nedir? –

+0

Eh, dosya formlarını 'form.append'in başında' file [] 'olarak değiştirdim ve şimdi arka tarafım, doğru sayıda dosyayı yüklemediğimi (iki tane olduğunu) söyledi. – foxes

cevap

0

Bu size .Bu sizin node.js sunucuya gider budur gereken dosyaları sonrası isteği ayrıştırmak ve almak için express ve body-parser modülü kullanarak böyle yaparız.

İthalat tüm modüller:

var express = require("express"); 
var bodyParser = require('body-parser') 
var app = express(); //init express app() 
var util = require('util'); 

//APP CONFIGURATION >> Skip this if you dont want CORS 
app.use(express.static('app')); // use this as resource directory 
app.use(function (req, res, next) { 
    res.header("Access-Control-Allow-Origin", "*"); 
    res.header("Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type, Accept"); 
    next(); 
}); 

yapılandır sonrası URL:

//url => url/for/mypostrequest 
app.post(url, done, function (req, res) { 

    //Handle the post request body here... 
    var filesUploaded = 0; 
    //check if files present 
    if (Object.keys(req.files).length === 0) { 
     console.log('no files uploaded'); 
    } else { 
     console.log(req.files); 
     var files = req.files.file1; 
     //If multiple files store in array.. 
     if (!util.isArray(req.files.file1)) { 
      files = [req.files.file1]; 
     } 
     filesUploaded = files.length; 
    } 
    res.json({message: 'Finished! Uploaded ' + filesUploaded + ' files. Route is /files1'}); 
}); 

tüm modüller yüklü olduğundan emin ve package.json


bağımlılık olarak mevcut olun Düğümden bir api yayın çağrısı yapmak için KOD ..

Önce http modülünü sunucunuza ekleyin.

var http = require('http'); 
var querystring = require('querystring'); 
var fs = require('fs'); 

Theninclude Aşağıdaki kod

var file1, file2; 
    //Read first File ... 
    fs.readFileSync('wheatData.csv', function (err, data) { 
     if (err) { 
      console.log('Error in file reading...'); 
     } 
     file1 = data; 

     //Read second file.... 
     fs.readFileSync('wheatData.csv', function (err, data) { 
      if (err) { 
       console.log('Error in file reading...'); 
      } 
      file2 = data; 

      //Construct the post request data.. 
      var postData = querystring.stringify({ 
       'msg': 'Hello World!', 
       'file1': file1, 
       'file2': file2 
      }); 
      var options = { //setup option for you request 
       hostname: 'www.path/to/api/', 
       port: 80, 
       path: '/upload', 
       method: 'POST', 
       headers: { 
        'Content-Type': 'application/x-www-form-urlencoded', 
        'Content-Length': postData.length 
       } 
      }; 
      var req = http.request(options, function (res) { 
       console.log('STATUS:' + res.statusCode); 
       console.log('HEADERS:' + JSON.stringify(res.headers)); 
       res.setEncoding('utf8'); 
       res.on('data', function (chunk) { 
        console.log('BODY: ' + chunk); 
       }); 
       res.on('end', function() { 
        console.log('No more data in response.'); 
       }); 
      }); 
      req.on('error', function (e) { 
       console.log('problem with request: ' + e.message); 
      }); 
      // write data to request body 
      req.write(postData); 
      req.end(); 

     }); 
    }); 

bu kod canlı sunucuda test edilmemiştir unutmayın düğüm sunucusundan bir post isteği yapmak için, kendi yapılandırma göre değişiklik yapmak gerekebilir.

Ayrıca, this numaralı gönderide önerildiği gibi düğüm sunucusundan sesli arama yapmak için istek veya gereksinimci gibi diğer kitaplıkları kullanabilirsiniz.

+0

Eh, bir API oluşturmamız gereken bir uni ataması için, Python'da bir tane oluşturduk ve Python'da API çağrılarını test etmeyi test ettik - bir node.JS betiğinin node'yu yerleştirmeden API'mızı çağırması mümkün Arka ucunda .JS? – foxes

+0

düğümün içinden api çağrısı yapmak için düğümün [http] (https://nodejs.org/dist/latest-v5.x/docs/api/http.html#http_http_request_options_callback) modülünü kullanabilirsiniz. .. Yanıt güncellemesinde örnek kod ekledim ... Ve node.js uygulamasında node.js'yi ne kadar istediğinize bağlı olarak arka uçta bulunmama hakkında. ya html veya bir hizmet katmanı API'si olarak sunmak için bunu hafif sunucu olarak kullanabilirsiniz. Bu tamamen senin kararın. – damitj07

+0

Beni doğru anlıyorsanız emin değilim - arka ucumuzda node.JS kullanmıyoruz, Python/Flask kullanıyoruz. Ancak başka bir sınıf arkadaşımızın API'mızı aramak istemesi ve projelerinin node.JS'de olması durumunda bunu yapabilecekler mi? – foxes

İlgili konular