Итак, у меня есть программа, которая извлекает метаданные из звукового файла.
Если в звуковом файле есть изображение альбома, я могу превратить его в URL-адрес объекта большого двоичного объекта и использовать его локально, но как я могу сохранить это изображение большого двоичного объекта на сервере?
Прямо сейчас у меня есть два поля ввода файла, одно для выбора звукового файла и одно для выбора изображения, если оно не извлечено из звукового файла.
Я использую музыкальные метаданные (https://github.com/leetreveil/musicmetadata), и вот как я вытащить изображение из звукового файла.
musicmetadata(data, function(err, result){
if(err)
console.log(err);
if(result.picture.length > 0){
var picture = result.picture[0];
var url = URL.createObjectURL(new Blob([picture.data], {'type':'image/' + picture.format}));
var image = document.getElementById('albumImage');
imageList.innerHTML = "<p>" + result.title + "." + picture.format + "</p>";
image.style.backgroundImage = "url(" + url + ")";
image.style.backgroundRepeat = "no-repeat";
image.style.backgroundSize = "155px 131px";
bgImage = url;
} else {
imageList.innerHTML = "<p>No image available in Meta Data<p>";
}
Я пробовал formData для установки и добавления большого двоичного объекта в форму после его публикации, но он просто передается либо как undefined, либо как blob URL-адреса большого двоичного объекта: http://localhost:3000/5c9db74b-f4f1-4125-8839-a7604ec1f7f9
Я использую экспресс с Multer для загрузки файлов. Я был бы в порядке, если бы добавил тестовые условия: если есть изображение альбома в сообщении, затем сохраните его в файловой системе, иначе просто сохраните файл из поля ввода изображения файла.
вот информация о моем почтовом запросе для загрузки на всякий случай.
var manageUpload = upload.fields([{ name: 'fileElem', maxCount: 1 }, { name: 'imageElem', maxCount: 1 } ]);
app.post('/upload', manageUpload, function(req, res){
post = new Post();
User.findOne({ username: req.session.user }, function(err, newUser){
if(err) console.log(err);
post.audioFile = req.files['fileElem'][0].filename;
if(typeof req.files['imageElem'] !== "undefined"){
post.imageFile = req.files['imageElem'][0].filename;
}
post._user = newUser._id;
post.title = req.body.title;
post.artist = req.body.artist;
post.start = req.body.start;
post.stop = req.body.stop;
post.genre = req.body.genre;
post.tags = req.body.tags;
post.save(function(err, newPost){
if(err)
console.log(err);
if(newPost){
res.redirect('/');
}
});
});
});
Итак, все работает так, как я хочу, кроме возможности сохранять изображение большого двоичного объекта непосредственно в каталог сервера для хранения изображений альбомов.
Любая помощь в решении этой проблемы будет принята с благодарностью, спасибо.