6

私のコントローラーは、このコードのリクエストオブジェクトでアップロードされた画像を取得しています:

[HttpPost]
public string Upload()
{
    string fileName = Request.Form["FileName"];
    string description = Request.Form["Description"];
    string image = Request.Form["Image"];

    return fileName;
}

image の値 (少なくとも最初の部分) は次のようになります。

data:image/jpeg;base64,/9j/4AAQSkZJRgABAgEAYABgAAD/7gAOQWRvYmUAZAAAAAAB/...

私は以下を使用して変換しようとしました:

byte[] bImage = Convert.FromBase64String(image);

ただし、これにより System.FormatException が発生します。「入力は、Base 64 以外の文字、3 つ以上のパディング文字、またはパディング文字に無効な文字が含まれているため、有効な Base-64 文字列ではありません。」

問題は、少なくとも文字列の先頭がbase64ではないということだと感じていますが、それがどれもそうではないことはわかっています。文字列をデコードする前に解析する必要がありますか? まったく違うものを見逃していますか?

4

2 に答える 2

9

最初からパーツを剥がすことができるようです。"data:image/jpeg;base64,"例えば:

const string ExpectedImagePrefix = "data:image/jpeg;base64,";
...
if (image.StartsWith(ExpectedImagePrefix))
{
    string base64 = image.Substring(ExpectedImagePrefix.Length);
    byte[] data = Convert.FromBase64String(base64);
    // Use the data
}
else
{
    // Not in the expected format
}

もちろん、これを JPEG 固有のものにしたくないかもしれませんが、最初のパスとして試してみます。

于 2013-02-22T20:29:44.417 に答える
5

その理由は実際には「data:image/jpeg;base64」です。この方法を使用して、base64 から開始文字列を削除することをお勧めします。

var base64Content = image.Split(',')[1];
byte[] bImage = Convert.FromBase64String(base64Content);

これは最短のソリューションであり、魔法の文字列を使用したり、正規表現を記述したりする必要はありません。

于 2016-01-29T08:31:53.923 に答える