Я записываю видео в хроме, используя RecordRTC.js, а затем отправляет сгенерированный blob на node.js-сервер, используя enctype = 'multipart/form-data'.Как сохранить blob как webm на node.js
Когда я отправить запрос пост путем преобразования блоб в dataURL,
------WebKitFormBoundaryZMbygbTah7gTAgUa
Content-Disposition: form-data; name="name"
1encof615fpyoj85bzwo.webm
------WebKitFormBoundaryZMbygbTah7gTAgUa
Content-Disposition: form-data; name="type"
video/webm
------WebKitFormBoundaryZMbygbTah7gTAgUa
Content-Disposition: form-data; name="contents"
data:video/webm;base64,GkXfo0AgQoaBAUL3gQFC8oEEQvOBCEKCQAR3ZWJtQoeBA...
------WebKitFormBoundaryZMbygbTah7gTAgUa--
это работает отлично. За исключением случаев, когда данные большие, видео не сохраняется должным образом. Может быть, потому что целостный контент не может быть перенесен из-за большого размера.
Итак, я попытался отправить blob в качестве типа входного файла, но сохраненное видео кажется поврежденным, так как оно не воспроизводится.
Отправленное блоб, при печати на сервере, что-то вроде этого:
Eߣ@ B��B��B��B�B�@webmB��B��S�g�fI�[email protected](*ױ@[email protected]�@[email protected]�@žT�[email protected]�@2ׁsŁ��"�...
код на стороне сервера является:
function upload(response, file) {
var fileRootName = file.name.split('.').shift(),
fileExtension = file.name.split('.').pop(),
filePathBase = upload_dir + '/',
fileRootNameWithBase = filePathBase + fileRootName,
filePath = fileRootNameWithBase + '.' + fileExtension,
fileID = 2,
fileBuffer;
while (fs.existsSync(filePath)) {
filePath = fileRootNameWithBase + '(' + fileID + ').' + fileExtension;
fileID += 1;
}
file.contents = file.contents.split(',').pop(); // removed this when sent contents as blob
fileBuffer = new Buffer(file.contents, "base64");
fs.writeFileSync(filePath, fileBuffer);
}
Что мне не хватает? Как я могу писать содержимое blob в файле, чтобы он мог быть сохранен как файл webm?