2011-01-12 7 views
2

私はストリームしたい画像を持つ外部リンクを持っていますが、試してみるとこのエラーが出ます。外部リンクから画像をバッファリングするには

エラー "URI形式はサポートされていません。"

私はストリームしようとしました: ストリームfileStream =新しいFileStream( "http://www.lokeshdhakar.com/projects/lightbox2/images/image-2.jpg"、FileMode.Open); byte [] fileContent =新しいバイト[fileStream.Length];

誰でもこれにいくつかの光を当てることができます。

おかげ

答えて

0

のFileStreamは、インターネット上で開くファイルをサポートしていません。

はこれを試してみてください:

var webClient = new WebClient(); 
using(var fileStream = webClient.OpenRead("http://www.lokeshdhakar.com/projects/lightbox2/images/image-2.jpg")) 
{ 
    byte[] fileContent = new byte[fileStream.Length];  
} 
+0

シンプルに見えますが、これを試しましたが、これはうまくいきません。次のエラーが表示されます。「このストリームはシーク操作をサポートしていません。 – simpleman

+0

少し修正してもう一度試してみました。素晴らしいもの。完全なパスをストリーミングする代わりに、私は上記の例のようにImageの部分を取る:Image pic = Image.FromStream(fileStream); – simpleman

4

使用しているのFileStreamコンストラクタは、ローカルハードドライブ上ではなく外部のURLとパスを提供しなければなりません。

あなたは、おそらくこのを探しています:

string url = "http://www.lokeshdhakar.com/projects/lightbox2/images/image-2.jpg"; 
HttpWebRequest httpWebRequest = (HttpWebRequest)HttpWebRequest.Create(url); 
HttpWebResponse httpWebReponse = (HttpWebResponse)httpWebRequest.GetResponse(); 
Stream stream = httpWebReponse.GetResponseStream(); 

おそらくも、このために:

Image pic = Image.FromStream(stream); 
MemoryStream ms = new MemoryStream(); 
pic.Save(ms, System.Drawing.Imaging.ImageFormat.Jpeg); 
Byte[] arr = ms.ToArray(); 
+0

すごい、これは実際に動作します。これは一時的に画像が保存されることを意味しますか? – simpleman

+0

一時的にハードドライブに保存されません。ストリームオブジェクトからbyte []を得ることができます。 2番目のコードスニペットを投稿して、画像を操作する方法を教えてください。あなたはあなたに画像リサイズアルゴリズム(GoogleはC#のサイズを変更する画像)を挿入することができます。 – citronas

+0

ありがとう、これは本当に便利でした。私はファイルにアクセスすることに別の問題がありました。私がアクセスしているネットワークは、資格情報を必要とする内部リンクです。だから私は共有したいもののための行を追加しました。 httpWebRequest.Credentials = new NetworkCredential { UserName = username、 パスワード= passowrd、 ドメイン=ドメイン }; – simpleman

関連する問題