#javascript #node.js
#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.emit(‘msg’, files) Но я не могу использовать сокет в среде prod. Я открыт для любого другого способа отправки записанного файла на сервер nodejs
Серверный код
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");
});
Клиентский код
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();
}
Комментарии:
1. Можете ли вы подтвердить, имеет ли папка, в которую вы пытаетесь загрузить свои файлы =>
./uploads
, все необходимые разрешения на чтение / запись?2. разрешения в порядке
3. Две вещи: правильно ли вы
enctype
установили в своем<form>
теге?, также вы установилиaccept
атрибут в своем<input type="file"..
теге какaccept="video/mp4,video/x-m4v,video/*"
?4. Соответствующим образом обновите свой mime-тип в своем
accept
атрибуте, который я привелmp4
иx-m4u
просто для справки5. Не могли бы вы поделиться и примером.. Я могу загружать мультимедиа непосредственно из HTML напрямую
Ответ №1:
решена проблема путем создания xmlhttprequest
var formData = new FormData();
formData.append('file', blob, "test.webm");
var request = new XMLHttpRequest();
request.open("POST", "/upload");
request.send(formData);