I want to upload a file in my app.js server , which should pipe that file to a crossdomain server like my upload.js server.
The full code can be found under the following link
The upload.js server is working. My problem is the app.js server. Request seems to be capable of streaming files (https://github.com/request/request#streaming). But I dont get it working.
I am always getting : [Error: Invalid protocol] in my app.js.
It musst be this line:
fs.createReadStream(file.path).pipe(request.post('localhost:4000/upload'))
I changed post to put and in my upload.js the post method also to put, but it results in the same error.
My Goal is to upload a file from the html page to localhost:3000/upload which pipes the file to localhost:4000/upload (ideally with same filename) . But I dont get it working (this post doesn't helped me).
app.js:
var express = require('express')
, multiparty = require('multiparty')
, request = require('request')
, fs = require('fs')
, util = require('util')
, http = require('http');
var app = express();
app.use('/static', express.static('static'));
process.on('uncaughtException', function (err) {
console.log(err);
});
app.get('/', function (req, res) {
res.redirect('static/index.html');
});
app.post('/upload', function(req, res, next){
//https://github.com/request/request#streaming
var form = new multiparty.Form();
form.parse(req, function(err, fields, files) {
res.writeHead(200, {'content-type': 'text/plain'});
res.write('received upload:
');
res.end(util.inspect({fields: fields, files: files}));
});
form.on('file', function(name,file) {
//stream it to localhost:4000 with same name
fs.createReadStream(file.path).pipe(request.post('localhost:4000/upload'))
console.log(file.path);
});
});
var server = app.listen(3000, '0.0.0.0' ,function () {
var host = server.address().address;
var port = server.address().port;
console.log('Example app listening at http://%s:%s', host, port);
});
index.html:
<!DOCTYPE html>
<html>
<head lang="en">
<meta charset="UTF-8">
<title>Upload</title>
</head>
<body>
<h2>Upload</h2>
<form method="post" action="/upload" enctype="multipart/form-data">
<input type="file" id="file" name="file" />
<button>upload</button>
</form>
</body>
</html>
upload.js:
var express = require('express')
, multiparty = require('multiparty')
, cors = require('cors')
, util = require('util')
, app = express();
app.use(cors());
process.on('uncaughtException', function (err) {
console.log(err);
});
app.get('/', cors(), function(req, res, next){
res.json({msg: 'This is CORS-enabled for all origins!'});
});
app.post('/upload', cors(), function(req, res, next){
var form = new multiparty.Form();
form.parse(req, function(err, fields, files) {
res.writeHead(200, {'content-type': 'text/plain'});
res.write('received upload:
');
res.end(util.inspect({fields: fields, files: files}));
});
form.on('file', function(name,file) {
console.log(file);
console.log(name);
});
});
app.listen(4000, function(){
console.log('CORS-enabled web server listening on port 4000');
});
See Question&Answers more detail:
os