asp.net - 从InputStream读取base64数据到文件C#

标签 asp.net c#-4.0 c#-3.0

我的应用程序从剪贴板获取图像并将其保存到服务器。 获取图像是通过java和javascript完成的。 我的 aspx 代码隐藏接收此数据(base64)并写入文件。 这是我的代码

  byte[] buffer = new byte[Request.InputStream.Length];
    int offset = 0;
    int cnt = 0;
    while ((cnt = Request.InputStream.Read(buffer, offset, 10)) > 0)
    {
        offset += cnt;
    }
    fileName = DateTime.Now.ToString("yyyyMMddHHmmssffff") + ".png";
    string base64 = System.Text.Encoding.UTF8.GetString(buffer);

    byte[] bytes = Convert.FromBase64String(base64);
    System.IO.FileStream stream = new FileStream(@"D:\www\images\" + fileName, FileMode.CreateNew);
    System.IO.BinaryWriter writer =new BinaryWriter(stream);
    writer.Write(bytes, 0, bytes.Length);
    writer.Close(); 

我的问题是 base64 。我得到这个字符串作为 utf8 编码。这似乎篡改了图像,我无法打开或查看它们。

[编辑] 这是创建数据的java代码

StringBuffer sb = new StringBuffer();
ByteArrayOutputStream stream = new ByteArrayOutputStream();
sb.append("data:image/").append("png").append(";base64,").append(Base64.encode(stream.toByteArray()));

所以我会得到一个像这样的字符串 数据:图像/png;base64,iVBORw0KGgoA.. 并使用 ajax 我将此字符串发布到我的 aspx 页面

最佳答案

base64 解码之前读取输入流时,应删除 data:image/png;base64, 前缀。例如,您可以在 ,:

处拆分
byte[] buffer = new byte[Request.InputStream.Length];
Request.InputStream.Read(buffer, 0, buffer.Length);
string data = Encoding.Default.GetString(buffer);
string[] tokens = data.Split(',');
if (tokens.Length > 1)
{
    byte[] image = Convert.FromBase64String(tokens[1]);
    string fileName = DateTime.Now.ToString("yyyyMMddHHmmssffff") + ".png";
    string path = Path.Combine(@"D:\www\images", fileName);
    File.WriteAllBytes(path, image);
}

关于asp.net - 从InputStream读取base64数据到文件C#,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10975021/

相关文章:

c# - ASP.Net Video 中的 DataList 应在点击时放大

asp.net - 在正则表达式中允许-(破折号)

mysql - 从表中选择所有日期时间大于时间戳的表?从 C# 到 mysql

c# - 如何在字典中查找 'first' 值?

asp.net - 如何使用 C# asp.net 从远程 URL 保存图像?

LinQ与自定义比较器不同,留下重复项

javascript - 为什么在使用 javascript 打印时 chrome 不显示图像并加载 css?

javascript - 如何在 onclick 时滚动到某个 div?

c# - Linq 代码无法正常工作

c# - 从数据集中获取 byte[] 并压缩