我的应用程序从剪贴板获取图像并将其保存到服务器。 获取图像是通过java和javascript完成的。 我的aspx codebehind接收此数据(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页面
答案 0 :(得分:4)
在data:image/png;base64,
解码之前读取输入流时,应删除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);
}