javascript - 如何使用 javascript 和 mvc 将 Canvas 上传到项目的文件夹

标签 javascript asp.net-mvc html5-canvas

我想将我的 Canvas 保存到我项目的“上传”文件夹中,因此尝试将其转换为图像,然后将其发送到代码隐藏并保存。 但它获取的是整个网页的屏幕截图,而不仅仅是 Canvas 。

这是我的 javascript 代码:

html2canvas(document.body, {onrendered: function (canvas) {
var mergedImage = canvas.toDataURL("image/png");
mergedImage = mergedImage.replace('data:image/png;base64,', '');
var param = { imageData: mergedImage };
$http({
        method: 'POST',
        url: '/Admin/MyController/UploadImage',
        data: JSON.stringify(param),
        dataType: 'JSON',
        headers: { 'content-type': 'application/json' }
     }).then(function (response) {
 alert('Your photos successfully uploaded!');
});
}
});

这是我在 mvc Controller 文件中的 C# 代码:

[HttpPost]
        public ContentResult UploadImage(string imageData)
        {
            try
            {
                string fileNameWithPath = Server.MapPath("~/Images/SomeFolder/custom_name.png");
                if (!Directory.Exists(fileNameWithPath))
                {
                    using (FileStream fs = new FileStream(fileNameWithPath, FileMode.Create))
                    {
                        using (BinaryWriter bw = new BinaryWriter(fs))
                        {
                            byte[] data = Convert.FromBase64String(imageData);
                            bw.Write(data);
                            bw.Close();
                        }
                    }
                }
            }
            catch (Exception ex)
            {

            }

            return Content("Uploaded");
        }

我只需要将 Canvas 保存到我的项目文件夹中。

最佳答案

看来你得到了截图,所以你的 Controller 一定工作正常。然而,看着https://html2canvas.hertzen.com/ ,我明白了:

<div id="capture" style="padding: 10px; background: #f5da55">
    <h4 style="color: #000; ">Hello world!</h4>
</div>

和:

html2canvas(document.querySelector("#capture")).then(canvas => {
    document.body.appendChild(canvas)
});

预期的结果是截取 #capture 元素内的内容。所以他们使用 html2canvas(document.querySelector("#capture")).then().

你是说你得到的是整个网页而不是 Canvas 。但我认为这是预期的行为,考虑到你写了这个:html2canvas(document.body, ...) 你要求body 元素的屏幕截图。使用 html2canvas,您应该将 document.body 替换为 Canvas 的 ID。

但是,您可能不需要这样做。您可以简单地获取 Canvas 的图像数据并保存它。为此,您可以使用:const dataURL = canvas.toDataURL();,或者如果您需要其他东西:https://developer.mozilla.org/en-US/docs/Web/API/HTMLCanvasElement

它也可能有帮助:https://www.html5canvastutorials.com/advanced/html5-canvas-save-drawing-as-an-image/

关于javascript - 如何使用 javascript 和 mvc 将 Canvas 上传到项目的文件夹,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58378331/

相关文章:

javascript - 无法显示形状

javascript - 使用 promise 内的数据更新 angular2 View /全局变量

javascript - 如何删除所有子节点,但保留实际数据?

c# - ASP.NET MVC : How to create a basic Pseudo Viewstate? 或者更好的解决方案?

asp.net - 在 Windows 上使 ASP.NET Core 服务器 (Kestrel) 区分大小写

javascript - 来自外部js文件的html5 Canvas 不起作用

javascript - 调整 html5 Canvas 中图像的大小

javascript - 以 Angular 从 API JSON 中排序的项目日期

javascript - 每次更改后刷新 Canvas

c# - MVC 5、EF 6 Barebones 无效的列名称 'Model'