2

私のアプリケーションはクリップボードから画像を取得し、サーバーに保存します。画像の取得は、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()));

だから私はこのような文字列を取得します data:image/png;base64,iVBORw0KGgoA.. そして ajax を使用して、この文字列を aspx ページに投稿します

4

1 に答える 1

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);
}
于 2012-06-11T06:07:10.737 に答える