繁体   English   中英

保存到磁盘时,base64编码的图像已损坏

[英]base64 encoded image is corrupted when saved to disk

我将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;
}

图像已成功保存,但似乎已损坏。 您能否指出可能缺少的东西?

在调用fs.writeFile时是否尝试过显式设置文件编码?

try {
    fs.writeFile(fileName, imageBuffer, {encoding:'utf8'}, function(err) {
        console.log(err);
    });
} catch (err) {
    console.error(err);
}

fs.writeFile(filename, data\\[, options\\], callback)文档: fs.writeFile(filename, data\\[, options\\], callback)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM