2

Web サイトからラップトップに画像をダウンロードする方法を実装したいと考えています。

public static void DownloadRemoteImageFile(string uri, string fileName)
{
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(uri);
HttpWebResponse response = (HttpWebResponse)request.GetResponse();
if ((response.StatusCode == HttpStatusCode.OK ||
            response.StatusCode == HttpStatusCode.Moved ||
            response.StatusCode == HttpStatusCode.Redirect) &&
            response.ContentType.StartsWith("image", StringComparison.OrdinalIgnoreCase))
        {
             //if the remote file was found, download it
            using (Stream inputStream = response.GetResponseStream())
            using (Stream outputStream = File.OpenWrite(fileName))
            {
                byte[] buffer = new byte[4096];
                int bytesRead;
                do
                {
                    bytesRead = inputStream.Read(buffer, 0, buffer.Length);
                    outputStream.Write(buffer, 0, bytesRead);
                } while (bytesRead != 0);
            }
        }
}

しかし、ContentTyperequestorresponseは「image/jpg」でも「image/png」でもありません。それらは常に「text/html」です。ローカルに保存した後、コンテンツが正しくなく、表示できないのはそのためだと思います。

誰でもここで解決策を見つけることができますか? ありがとう

4

4 に答える 4

0

画像を取得したいサイトでCookieが必要になる場合があります。ブラウザーを使用してサイトにアクセスするとき、気付かないことがありますが、ブラウザーは実際には 1 ミリ秒ほどサイトにアクセスしてから、すぐにリロードし、同時に Cookie を取得します。しかし、サイトを再度ロードする前に、今度はブラウザーが Cookie を渡し、サイトはそれを受け入れて画像を返します。

詳しく説明すると、これは、メソッドがブラウザが実際に行っていることの半分しか行っていないことを意味します。2 つの GET リクエスト メソッドの半分。1 つ目は Cookie を取得するためのもので、2 つ目は実際に画像自体を取得するためのものです。

からの情報 (および少し関連している可能性があります): C# は、サイトが受け入れる Cookie を動的に生成しますか?

于 2014-07-08T14:35:00.507 に答える
0

このコードを使用できます-に基づいてJpegBitmapDecoder class

JpegBitmapDecoder decoder = new JpegBitmapDecoder(YourImageStreamSource, BitmapCreateOptions.PreservePixelFormat, BitmapCacheOption.Default);
//here you can adjust your YourImageStreamSource with outputStream value

BitmapSource bitmapSource = decoder.Frames[0];

Image myImage = new Image();
myImage.Source = bitmapSource;
myImage.Save("YourImage.jpg", System.Drawing.Imaging.ImageFormat.Jpeg);

リンク: http://msdn.microsoft.com/en-us/library/aa970689.aspx

于 2012-09-29T03:36:46.733 に答える
0

コンテンツ タイプを特定の画像タイプに設定してみてください

Response.ContentType = "image/jpeg";
于 2012-09-29T03:38:52.323 に答える
-1

あなたのコードは問題ありませんが、あなたがやろうとしていることは、多くの場合、Web サイトの所有者によって望ましくない動作と見なされます。ほとんどのサイトでは、サイトで画像を表示することを望んでいますが、ランダムにダウンロードすることは望んでいません。質問の反対を検索して、反対している技術と保護を知ることができます。

続行する前に、スクレイピングしようとしているサイトの使用許諾契約または同様の文書を読むことを強くお勧めします。

于 2012-09-29T05:41:43.413 に答える