`

C#替换下载远程图片

阅读更多

/// <summary>
/// 替换下载远程图片及入库操作
/// </summary>
/// <param name="strInput">内容</param>
/// <returns>返回string类型;替换后的内容</returns>
public static string ReplaceRemoteUrl(string strInput)
{
string tempFilePath="";
string outStr;
outStr = strInput;

//获取远程图片url集合
string _pattern = @"(http|https|ftp|rtsp|mms):(\/\/|\\\\){1}((([\w-])+[.]){1,}(net|com|cn|org|cc|tv|[0-9]{1,3}))([^\?\s]*\/)(([^\?\s])+[.]{1}(gif|jpg|png|bmp))";
MatchCollection found =null;
RegexOptions TheOptions;
TheOptions = RegexOptions.Singleline | RegexOptions.IgnoreCase;
Regex r = new Regex(_pattern,TheOptions);
found = r.Matches(strInput);

foreach (Match m in found)
{
tempFilePath="";
if(m.Value.Length>0)
{
tempFilePath = GetRemoteImage(m.Value);
//如果下载成功
if(tempFilePath.Length>0)
{
outStr = outStr.Replace(m.Value,tempFilePath);
}
}
}

return outStr;
}
/// <summary>
/// 下载远程图片
/// </summary>
/// <param name="strUrl">将要下载的图片地址</param>
/// <returns>返回string类型;图片的本地地址</returns>
private static string GetRemoteImage(string strUrl)
{
try
{
//硬盘路径
string PathStr = System.Configuration.ConfigurationSettings.AppSettings["MoviePath"];
//url路径
string dPathStr = System.Configuration.ConfigurationSettings.AppSettings["MovieWebPath"];

string fileExt = System.IO.Path.GetExtension(strUrl);
Random ro=new Random((int)DateTime.Now.Ticks);
Random ro2 = new Random(Guid.NewGuid().GetHashCode());
string filePath = @"Upload\Image\"+ DateTime.Now.ToString("yyyy") + @"\" + DateTime.Now.ToString("MMdd") + @"\" + DateTime.Now.ToString("yyyyMMddHHmmss") + ro.Next(1000) + fileExt;

string tempFolder = System.IO.Path.GetDirectoryName(PathStr + filePath);
if( !System.IO.Directory.Exists( tempFolder ) )
{
System.IO.Directory.CreateDirectory(tempFolder);
}

WebClient wc = new WebClient();
wc.DownloadFile(strUrl,PathStr + filePath);
wc.Dispose();


filePath = dPathStr + filePath;
return filePath;
}
catch(Exception err)
{
System.Web.HttpContext.Current.Response.Write("<script language='JavaScript' type='text/JavaScript'>alert('获取远程图片出错!原因如下:\\n"+ err.Message +"');</script>\n");
//HttpContext.Current.Response.Write(Functions.ShowErr("获取远程图片出错!原因如下:\\n" + ,1));
//HttpContext.Current.Response.End();
return "";
}
}

分享到:
评论

相关推荐

    C#远程桌面.rar_MsTscAxWrapper.dll_c# rdp_c#远程桌面_远程屏幕c#_远程桌面

    C#版本的远程桌面源代码,可以替换Widnows自带的远程桌面连接,可记录保存等

    明日科技C#开发入门及项目实战

    实例086 在richtextbox控件中替换文本文字 实例087 利用richtextbox控件实现文字定位与标示 实例088 将数据表中的字段添加到combobox控件中 实例089 对listbox控件中的数据进行排序 实例090 listbox控件拒绝添加重复...

    C#开发经验技巧宝典

    0773 如何获取远程计算机上所有的进程 470 17.7 其他相关技术 470 0774 如何在注册表中保存窗体的大小和位置 470 0775 如何实现程序间注册表内传递变量 471 0776 在使用OpenFileDialog中的相对路径问题 ...

    C#编程经验技巧宝典

    C#编程经验技巧宝典源代码,目录如下: 第1章 开发环境 1 &lt;br&gt;1.1 Visual Studio开发环境安装与配置 2 &lt;br&gt;0001 安装Visual Studio 2005开发环境须知 2 &lt;br&gt;0002 配置合适的Visual Studio 2005...

    C#全能速查宝典

    《C#全能速查宝典》共分为8章,分别介绍了C#语言基础、Windows窗体及常用控件、Windows高级控件、控件公共属性、方法及事件、数据库开发、文件、数据流与注册表、GDI+绘图技术和C#高级编程,共包含562个C#编程中常用...

    《C#经典编程220例》.(明日科技).【带书签】-共3部分

    实例086 在richtextbox控件中替换文本文字 141 实例087 利用richtextbox控件实现文字定位与标示 142 实例088 将数据表中的字段添加到combobox控件中 143 实例089 对listbox控件中的数据进行排序 145 实例090 listbox...

    TeamControl:基于WebRTC的Visual Desktop远程控制应用程序

    团队控制基于WebRTC的Visual Desktop远程控制应用程序在要控制的计算机上npm installnode controllee/将在默认浏览器中自动打开 。 然后提示您输入房间名称,输入您喜欢的任意名称。 并提示您选择要共享的屏幕部分,...

    自动更新源码

    自动更新程序主要负责从服务器中获取相应的更新文件,并且把这些文件下载到本地,替换现有的文件。达到修复Bug,更新功能的目的。

    PHPCMS 文件管理器(原Longbill文件管理器) v4.03

    可以远程管理服务器上的文件,包括上传,下载,新建,编辑,复制,粘贴,删除,远程下载等文件操作。 2.采用 PHP + AJAX 的方式构建。客户端采用缓存技术,不仅反应迅速,而且能减轻服务器的负担。 3.实现了远程 ZIP...

    YouTubeBankingAPI:这是由C#和ASP.NET Core,Entity FrameworkCore,SQL Server,

    使用ConnectionString将appsettings.json中的connectionStrings值替换为您自己的本地/远程SQL Server数据库 您可以"Add-Migration initial" on the Package Manager Console运行"Add-Migration initial" on the ...

    editplus 代码编辑器html c++ jsp css

    【14】工具集成——编译器集成例子(Java、Borland C++、Visual C++、Inno Setup、nsis、C#) 【15】工具集成——让Editplus调试PHP程序———————-avenger,aukw 【16】工具集成——打造 PHP 调试环境(二)——...

    vc++ 开发实例源码包

    这个例子就是查询任何可执行文件的版本信息并且 C++builder 和 VC 都通用,只需要把 AnsiString 替换成 CString 就行了。 gh0st v3.6 源码 - 可下断点调试! 如题。详细见源码。 GMem 内存管理单元源码。GMem.cpp...

    vc++ 应用源码包_1

    这个例子就是查询任何可执行文件的版本信息并且 C++builder 和 VC 都通用,只需要把 AnsiString 替换成 CString 就行了。 gh0st v3.6 源码 - 可下断点调试! GMem 内存管理单元源码。GMem.cpp和GMem.h是内存管理...

    vc++ 应用源码包_2

    这个例子就是查询任何可执行文件的版本信息并且 C++builder 和 VC 都通用,只需要把 AnsiString 替换成 CString 就行了。 gh0st v3.6 源码 - 可下断点调试! GMem 内存管理单元源码。GMem.cpp和GMem.h是内存管理...

    vc++ 应用源码包_6

    这个例子就是查询任何可执行文件的版本信息并且 C++builder 和 VC 都通用,只需要把 AnsiString 替换成 CString 就行了。 gh0st v3.6 源码 - 可下断点调试! GMem 内存管理单元源码。GMem.cpp和GMem.h是内存管理...

    vc++ 应用源码包_5

    这个例子就是查询任何可执行文件的版本信息并且 C++builder 和 VC 都通用,只需要把 AnsiString 替换成 CString 就行了。 gh0st v3.6 源码 - 可下断点调试! GMem 内存管理单元源码。GMem.cpp和GMem.h是内存管理...

Global site tag (gtag.js) - Google Analytics