поэтому у меня есть программа, которая захватывает метаданные из звукового файла.Сохранение блоба на сервере?
Если у звукового файла есть изображение альбома, я могу превратить его в URL-адрес объекта blob и использовать его локально, но как я могу сохранить это изображение блоба на сервере?
Прямо сейчас у меня есть два поля ввода файла: один для выбора звукового файла, а другой - для выбора изображения, если из файла звука нет.
Я использую musicmetadata (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 установить и добавить каплю в форме, как только его отправил, но он просто проходит или как определено или URL объекта Blob сгустка: 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('/');
}
});
});
});
Итак, все работает так, как я хочу, кроме возможности сохранить изображение блоба непосредственно в каталоге сервера для хранения изображений альбомов.
Любая помощь при решении этого будет принята с благодарностью, спасибо.
Спасибо, что нашли время, чтобы помочь. Я попытался скомпоновать код, но когда я отправляю сообщение и просматриваю вкладку сети, чтобы увидеть, что было отправлено с формой, imageElem - это «Content-Type: application/octet-stream», а не изображение/jpeg, как хотелось бы. Любые идеи о том, как правильно его разместить? – 0xef2387
'application/octet-stream' просто указывает двоичные данные, вы можете интерпретировать его так, как хотите, также как jpeg-изображение. – schroffl
Да, похоже, что он не работает. Я должен что-то упустить. Вот мой текущий код. Может быть, я ошибался? http://pastebin.com/p2h0jxdX еще раз спасибо за помощь! – 0xef2387