2011-05-13 18 views
5

Chcesz przesłać plik przy użyciu Ajax za to przy użyciu tej uploader http://valums.com/ajax-upload/Ajax upload plików w node.js

aw node.js napisać ten kod, który działa z normalną przesyłanie plików bez AJAX.

console.log("request " + sys.inspect(req.headers)); 

      req.on('data', function(chunk) { 
       console.log("Received body data:"); 
       // console.log(chunk.toString()); 
      }); 
      var form = new formidable.IncomingForm(); 

      form.parse(req, function(err,fields, files) { 
       console.log('in if condition'+sys.inspect({fields: fields, files: files})); 
       fs.writeFile("upload/"+files.upload.name, files.upload,'utf8', function (err) { 
        if (err) throw err; 
        console.log('It\'s saved!'); 
        client.putFile("upload/"+files.upload.name, files.upload.name, function(err, res){ 
         if (err) throw err; 
         if (200 == res.statusCode) { 
          console.log('saved to s3'); 

          httpres.writeHead(200, {'content-type': 'text/plain'}); 
          httpres.write('received 1upload:\n\n'); 
          httpres.end(); 
         } 
        }); 
       }); 
      }); 

Ale to daje błąd?

request { host: 'myhost:8001', 
    'user-agent': 'Mozilla/5.0 (Windows NT 5.1; rv:2.0.1) Gecko/20100101 Firefox/4.0.1', 
    accept: 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8', 
    'accept-language': 'en-us,en;q=0.5', 
    'accept-encoding': 'gzip, deflate', 
    'accept-charset': 'ISO-8859-1,utf-8;q=0.7,*;q=0.7', 
    'keep-alive': '115', 
    connection: 'keep-alive', 
    origin: 'http://myhost', 
    'access-control-request-method': 'POST', 
    'access-control-request-headers': 'content-type' } 

events.js:45 
     throw arguments[1]; // Unhandled 'error' event 
        ^
Error: bad content-type header, no content-type 
    at IncomingForm._parseContentType (/usr/local/lib/node/.npm/formidable/1.0.0/package/lib/formidable/incoming_form.js:196:17) 
    at IncomingForm.writeHeaders (/usr/local/lib/node/.npm/formidable/1.0.0/package/lib/formidable/incoming_form.js:109:8) 
    at IncomingForm.parse (/usr/local/lib/node/.npm/formidable/1.0.0/package/lib/formidable/incoming_form.js:65:8) 
    at Server.<anonymous> (/home/myfolder/myfolder/newcontentserver.js:29:18) 
    at Server.emit (events.js:67:17) 
    at HTTPParser.onIncoming (http.js:1108:12) 
    at HTTPParser.onHeadersComplete (http.js:108:31) 
    at Socket.ondata (http.js:1007:22) 
    at Socket._onReadable (net.js:678:27) 
    at IOWatcher.onReadable [as callback] (net.js:177:10) 

myślę problemem jest Content-Type nie jest ustawiony w nagłówkach AJAX .thats wysyłania plików dlaczego ten błąd nadchodzi jak mogę ustawić nagłówek w tym przesyłającej, lub w jaki sposób mogę zrobić plik serwer node.js według danych przychodzących. Ponieważ używa xhr, więc myślę, że nie mogę użyć formidable.incomingform(), co powinienem użyć?

+1

Musimy zobaczyć Twój javascript, który prześle formularz. – Raynos

Odpowiedz

1

Patrząc na najnowsze fileuploader.js source code on github robi ustawić typ zawartości

xhr.setRequestHeader("Content-Type", "application/octet-stream");

wierzę, problem leży gdzie indziej.

+0

@Rayons, ale myślę, że nie mogę użyć groźnego, potrzebuję użyć czegoś innego do wgrywania – XMen