0

Web からデータベースに画像を保存する Web アプリケーションを作成しています。現在、画像を保存するために使用しているのは次のとおりです。

[WebMethod]
public static void Save(string pictures)
{
    // pictures is an object containing the URL of the image along with some metadata
    List<ImageObject> imageList = new JavaScriptSerializer().Deserialize<List<ImageObject>>(pictures);
    for (int i = 0; i < imageList.Count; i++)
    {
        var webClient = new WebClient();
        byte[] byteArray = webClient.DownloadData(imageList[i].URL);
        imageList[i].Picture = byteArray;
    }
    // some SQL to save imageList
}

画像オブジェクト:

[DataContract]
public class ImageObject
{
    [DataMember]
    public string URL { get; set; }
    [DataMember]
    public string Picture { get; set; }
}

現在、これは URL からのダウンロードに問題なく機能します。データベースに保存されたエントリ:

0xFFD8FFE000104A464946000101[...]331B7CCA7F0AD3A02DC8898F

この画像を表示するにはSystem.Convert.ToBase64String()、取得後に呼び出して画像として使用するだけsrcです。ただし、ユーザーが自分の写真をアップロードするための機能を追加しようとしています。このための私の関数は、から呼び出されます<input />:

function uploadPicture(){
    var numPics = document.getElementById("uploadedPictures").files.length;
    var oFReader = new FileReader();
    oFReader.onload = function (oFREvent) {
        var src = oFREvent.target.result;
        document.getElementById('image').src = src;
    }
    oFReader.readAsDataURL(document.getElementById("uploadedPictures").files.length;
}

これを使用する場合、ブラウザから取得する画像ソースは次のとおりです (元の画像が 500 KB しかないのに 2 MB 以上):

data:image/bmp;base64,/9j/4AAQSkZJRgABAgEAY[...]k8tTMZEBCsEbSeRYem493IHAfiHWq6vKlOv/Z

これは、ソースとして使用すると正しく表示されます。ただし、これは実際の URL ではない (また、WebClient.DownloadData()260 文字未満の URL に制限されている) ため、このデータをデータベースに保存する他の方法を試しています。ただし、同じ形式で保存する機能が見つからないようですWebClient.DownloadData()。たとえば、base 64 文字列を画像に変換して保存する方法を見てきましたが、ほとんどの回答Convert.FromBase64String()で が使用されているようですが、これを使用するとデータベースに別の形式で保存されるようです。

0x64006100740061003A0069006D0[...]10051004500420041005100450042004

System.Convert.ToBase64String()このリターンで使用しようとしています

ZABhAHQAYQA6AGkAbQBhAGcAZQAvAGIAbQBwADsAYgBh[...]UwBlAFIAWQBlAG0ANAA5ADMASQBIAEEAZgBpAEgAVwBxADYAdgBLAGwATwB2AC8AWgA=

これは私が使用したものとは異なりConvert.FromBase64String()ます。同じ形式で保存したり、画像として表示したりするためにGoogleで見つけた他のことは、これまでのところ機能していません.

したがって、結果をURLFileReaderの場合と同じ形式に変換する方法があるか、またはデータをソースとして使用して表示できる形式に変換する方法があるかどうか疑問に思っています。WebClient.DownloadData()0x6400[...]<img>

4

1 に答える 1

0

0x64006100[....]データベースに保存されたデータがではなく で始まった理由0xFFD8FFE0[...]は、最初の の URI を取り除くのを忘れたためであることが判明しましたdata:image;base64,。これを行った後、すべてが保存され、 を使用して適切に読み取られますSystem.Convert.ToBase64String()

于 2013-10-08T14:58:41.280 に答える