Я отправляю изображение в виде буфера обмена base64 на сервер (узел), и я сохраняю base64 на диск. По какой-то причине изображение повреждено.base64 закодированное изображение повреждено при сохранении на диске
стороне клиента логика размещения:
function sendData($http, clipboardImage) {
// $http.defaults.headers.post["Content-Type"] = "application/x-www-form-urlencoded";
// var imgData = JSON.stringify(clipboardImage);
//var data = {"imgdata" : clipboardImage};
var url = "http://localhost:3000/pad/img/";
$http({
method: 'POST',
url: url,
data: "data=" + clipboardImage
});
}
$("[ng-model='html']").delegate("p", "paste", function(event) {
var items = (event.clipboardData || event.originalEvent.clipboardData).items;
console.log(JSON.stringify(items)); // will give you the mime types
// find pasted image among pasted items
var blob = null;
for (var i = 0; i < items.length; i++) {
if (items[i].type.indexOf("image") === 0) {
blob = items[i].getAsFile();
}
}
// load image if there is a pasted image
if (blob !== null) {
var reader = new FileReader();
reader.onload = function(e) {
sendData($http, e.target.result);
};
reader.readAsDataURL(blob);
}
});
логика сервера:
app.post("/pad/img/", function(req, res) {
var imgB64Data = req.body.data;
var decodedImg = decodeBase64Image(imgB64Data);
var imageBuffer = decodedImg.data;
var type = decodedImg.type;
var extension = mime.extension(type);
var fileName = "image." + extension;
try {
fs.writeFile(fileName, imageBuffer, function(err) {
console.log(err);
});
} catch (err) {
console.error(err);
}
});
function decodeBase64Image(dataString) {
var matches = dataString.match(/^data:([A-Za-z-+\/]+);base64,(.+)$/),
response = {};
if (matches.length !== 3) {
return new Error('Invalid input string');
}
response.type = matches[1];
response.data = new Buffer(matches[2], 'base64');
return response;
}
Изображение спасаемых успешно, но это, кажется, поврежден. Не могли бы вы указать, что может отсутствовать?
Вы проверили в кодировке Base64 ('матчи [2]') перед включением его в буфер? Я не уверен, какой тип base64 'readAsDataURL' вернется, вам может понадобиться сначала« url encode »на стороне клиента. Если это вариант сохранения URL-адресов, вам может потребоваться его конвертировать на сервер. –
Я предполагаю, что это была проблема с отправкой данных. $ http ({ метод: 'POST', url: url, данные: {данные: clipboardImage} }); –