使用POST Nodejs

时间:2016-10-02 16:21:24

标签: javascript node.js

我正在尝试录制视频并上传到服务器。我可以创建视频,但上传无效。我能做错什么?我尝试直接从服务器下载文件(a.click())。它工作,但我无法上传到nodejs服务器

我能够发布文本值并从服务器获取我能够使用html中的表单上传从文件系统中选择的文件并传递直接选择的文件。下面

<form id="uploadForm"
      enctype="multipart/form-data"
      action="/upload"
      method="post">
  <input type="file" name="file" />
  <input type="submit" value="Upload Image" name="submit">
  <span id = "status"></span>
</form>

我也能用socket.io发送文件,如果是socket.emit(&#39; msg&#39;,文件)但是我不能在prod环境中使用socket。我愿意以任何其他方式将录制的文件发送到nodejs服务器

服务器代码

&#13;
&#13;
var express	=	require("express");
var multer	=	require('multer');

var app	=	express();
var fs = require('fs');
var storage	=	multer.diskStorage({
  destination: function (req, file, callback) {
    callback(null, './uploads');
  },
  filename: function (req, file, cb) {
              var datetimestamp = Date.now();
              cb(null, file.originalname + '-' + datetimestamp + '.' + file.originalname.split('.')[file.originalname.split('.').length -1])
          }
    });
var upload = multer({ storage : storage}).single('file');
app.get('/',function(req,res){
      res.sendFile(__dirname + "/index.html");
});
app.post('/uploadlocal',function(req,res){

	upload(req,res,function(err) {console.log(req.files);
	console.log(req.body);

		if(err) {
			return res.end("Error uploading file.");
		}
	
		res.end("File is uploaded");
	});
});



app.listen(3000,function(){
    console.log("Working on port 3000");
});
&#13;
&#13;
&#13;

客户代码

&#13;
&#13;
function download() {
  var blob = new Blob(recordedBlobs, {type: 'video/webm'});
  var url = window.URL.createObjectURL(blob);
      var files = {

                                  video: {
                                      type: 'video/webm',
                                      dataURL: url
                                  }
                            };
  console.log('recording done');

  var a = document.createElement('a');
  a.style.display = 'none';
  a.href = url;
  a.download = 'test.webm';
  document.body.appendChild(a);
a.click();
  postclick(files);

  setTimeout(function() {
    document.body.removeChild(a);
    window.URL.revokeObjectURL(url);
  }, 100);
}


function postclick(data) {
    var form = $('<form></form>');

    form.attr("method", "post");
    form.attr("action", '/uploadlocal');
    var field = $('<input></input>');
    field.attr("type", "text");
	field.attr("name", 'file');
    field.attr("value", data );

        form.append(field);
    $(document.body).append(form);
    form.submit();
}
&#13;
&#13;
&#13;

1 个答案:

答案 0 :(得分:0)

通过创建xmlhttprequest

解决了这个问题
var formData = new FormData();
formData.append('file', blob, "test.webm");
var request = new XMLHttpRequest();
request.open("POST", "/upload");
request.send(formData);