URLがリンクの最後に画像形式を持たない場合、C#のURLから画像を直接ダウンロードする方法はありますか? URLの例:
https://fbcdn-sphotos-h-a.akamaihd.net/hphotos-ak-xpf1/v/t34.0-12/10555140_10201501435212873_1318258071_n.jpg?oh=97ebc03895b7acee9aebbde7d6b002bf&oe=53C9ABB0&__gda__=1405685729_110e04e71d969d392b63b27ec4f4b24a
URLが画像形式で終わるときに画像をダウンロードする方法を知っています。例えば:
http://img1.wikia.nocookie.net/__cb20101219155130/uncyclopedia/images/7/70/Facebooklogin.png
簡単に次の方法を使用できます。
using (WebClient client = new WebClient())
{
client.DownloadFile(new Uri(url), @"c:\temp\image35.png");
//OR
client.DownloadFileAsync(new Uri(url), @"c:\temp\image35.png");
}
これらのメソッドは、DownloadString(..)およびDownloadStringAsync(...)とほぼ同じです。ファイルはC#文字列ではなくディレクトリに保存され、URiには形式の拡張子は必要ありません
public void SaveImage(string filename, ImageFormat format) {
WebClient client = new WebClient();
Stream stream = client.OpenRead(imageUrl);
Bitmap bitmap; bitmap = new Bitmap(stream);
if (bitmap != null)
bitmap.Save(filename, format);
stream.Flush();
stream.Close();
client.Dispose();
}
try{
SaveImage("--- Any Image Path ---", ImageFormat.Png)
}catch(ExternalException)
{
//Something is wrong with Format -- Maybe required Format is not
// applicable here
}
catch(ArgumentNullException)
{
//Something wrong with Stream
}
画像形式を知っているかどうかに応じて、次の方法で実行できます。
using (WebClient webClient = new WebClient())
{
webClient.DownloadFile("http://yoururl.com/image.png", "image.png") ;
}
Image.FromStream
を使用して、あらゆる種類の通常のビットマップ(jpg、png、bmp、gif、...)をロードできます。ファイルタイプを自動的に検出し、URLを確認する必要さえありません。拡張(これはあまり良い方法ではありません)。例えば:
using (WebClient webClient = new WebClient())
{
byte [] data = webClient.DownloadData("https://fbcdn-sphotos-h-a.akamaihd.net/hphotos-ak-xpf1/v/t34.0-12/10555140_10201501435212873_1318258071_n.jpg?oh=97ebc03895b7acee9aebbde7d6b002bf&oe=53C9ABB0&__gda__=1405685729_110e04e71d9");
using (MemoryStream mem = new MemoryStream(data))
{
using (var yourImage = Image.FromStream(mem))
{
// If you want it as Png
yourImage.Save("path_to_your_file.png", ImageFormat.Png) ;
// If you want it as Jpeg
yourImage.Save("path_to_your_file.jpg", ImageFormat.Jpeg) ;
}
}
}
注:ダウンロードしたコンテンツが既知の画像タイプでない場合、Image.FromStream
によってArgumentExceptionがスローされる場合があります。
MSDNのこのリファレンス をチェックして、利用可能なすべての形式を見つけます。 WebClient
および Bitmap
への参照です。
画像をファイルに保存せずにダウンロードしたい場合:
Image DownloadImage(string fromUrl)
{
using (System.Net.WebClient webClient = new System.Net.WebClient())
{
using (Stream stream = webClient.OpenRead(fromUrl))
{
return Image.FromStream(stream);
}
}
}
.net Frameworkでは、PictureBoxコントロールがURLから画像をロードできます
ロード完了イベントで画像を保存
protected void LoadImage() {
pictureBox1.ImageLocation = "PROXY_URL;}
void pictureBox1_LoadCompleted(object sender, AsyncCompletedEventArgs e) {
pictureBox1.Image.Save(destination); }
これを試してみてください100%間違いなく動作します
これをコントローラーファイルに書き込む
public class TenantCustomizationController : RecruitControllerBase
//enter code here
[AllowAnonymous]
[HttpGet]
public async Task<FileStreamResult> GetLogoImage(string logoimage)
{
string str = "" ;
var filePath = Server.MapPath("~/App_Data/" + AbpSession.TenantId.Value);
// DirectoryInfo dir = new DirectoryInfo(filePath);
string[] filePaths = Directory.GetFiles(@filePath, "*.*");
foreach (var fileTemp in filePaths)
{
str= fileTemp.ToString();
}
return File(new MemoryStream(System.IO.File.ReadAllBytes(str)), System.Web.MimeMapping.GetMimeMapping(str), Path.GetFileName(str));
}
//09/07/2018
Here Is my View
<div><a href="/TenantCustomization/GetLogoImage?Type=Logo" target="_blank">@L("DownloadBrowseLogo")</a></div>