zoukankan      html  css  js  c++  java
  • 通用类 RemoteUpload 远程上传从其他网站复制过来的图片

    /// <summary>
        /// 远程上传从其他网站复制过来的图片
        /// </summary>
        public class RemoteUpload
        {
            
            /// <summary>
            /// 上传的源文件名称
            /// </summary>
            private string sOriginalFileName;
            /// <summary>
            /// 上传后的文件名称
            /// </summary>
            private string sSaveFileName;
            /// <summary>
            /// 结合 sContentPath 得取的带路径的上传路径名称
            /// </summary>
            private string sPathFileName;
            /// <summary>
            /// 上传需要建立目录的临时变量
            /// </summary>
            /// <permission cref="System.Security.PermissionSet">private</permission>
            private string sPath;
            /// <summary>
            /// 根据 sBaseUrl 参数转化后的路径(包含sUploadDir)路径
            /// </summary>
            private string sContentPath;
    
    
            /// <summary>
            /// 从HTML文本中下载远程图片
            /// </summary>
            /// <param name="sHTML">含有图片网址路径的HTML文本</param>
            /// <param name="path">保存的路径</param>
            /// <param name="Images">返回下载的所有图片文件,以“|”间隔!</param>
            /// <returns>返回替换远程图片路径的HTML文本</returns>
            public string RtnContent(string sHTML, string path,ref string Images )
            {
                string s_Content = sHTML;
                //设置为在上传内容中搜索指定值的正则表达式
                System.Text.RegularExpressions.MatchCollection mc = System.Text.RegularExpressions.Regex.Matches(sHTML, @"((http|https|ftp|rtsp|mms):(\/\/|\\\\){1}(([A-Za-z0-9_-])+[.]){1,}(net|com|cn|org|cc|tv|[0-9]{1,3})(\S*\/)((\S)+[.]{1}(gif|jpg|jpeg|bmp|png)))", System.Text.RegularExpressions.RegexOptions.IgnoreCase);
                string[] a_RemoteUrl = new string[mc.Count];
    
                //转入无重复数据
                for(int i = 0;i < mc.Count;i++)
                {
                    a_RemoteUrl[i] = (mc[i].Groups[0].ToString());
                }
    
                //保存的上传后的文件名称
                string SaveFileName;
                //文件类型
                string SaveFileType;
    
                //上传文件自动建目录标志(年月日)	
    
                sPath = this.CreateDateTimeDirectory("3");
    
                sContentPath = path + "upload/";
    
                string VisualPath = path + "upload/";
    
    
    
                sPath = (sPath.Trim().Equals(System.String.Empty) ? System.String.Empty : System.String.Concat(sPath, "/"));
    
    
                //如果不存在建立目录
                if(!Directory.Exists(System.IO.Path.Combine(sContentPath, sPath)))
                {
                    Directory.CreateDirectory(System.IO.Path.Combine(sContentPath, sPath));
                }
    
    
                sOriginalFileName = sOriginalFileName + "|";
                sSaveFileName = sSaveFileName + "|";
                sPathFileName = sPathFileName + "|";
    
                 //遍历上传内容中允许的文件
                foreach(string str in a_RemoteUrl)
                {
                    //获取上传文件的扩展名
                    SaveFileType = str.Substring(str.LastIndexOf(".") + 1).ToLower();
                    //获取上传后的随机文件名
                    SaveFileName = GetRndFileName(SaveFileType);
                    //保存远程的文件到本地
                    if(SaveRemoteFile(SaveFileName, str))
                    {
                        sOriginalFileName += str.Substring(str.LastIndexOf("/") + 1) + "|";
                        sSaveFileName += SaveFileName + "|";
                        sPathFileName += VisualPath + sPath + SaveFileName + "|";
                        s_Content = s_Content.Replace(str, VisualPath + sPath + SaveFileName);                    
                    }
                }
                sOriginalFileName = sOriginalFileName.Substring(0, sOriginalFileName.Length - 1);
                sSaveFileName = sSaveFileName.Substring(0, sSaveFileName.Length - 1);
                sPathFileName = sPathFileName.Substring(0, sPathFileName.Length - 1);
                Images = sPathFileName;
                return s_Content;
            }
    
            private string GetRndFileName(string filetype)
            {
                string filename = StringHelper.RadomFileName();
                return filename + "." + filetype;
            }
    
            /// <summary>
            /// 保存远程的文件到本地
            /// </summary>
            /// <param name="s_LocalFileName">保存到本地文件名</param>
            /// <param name="s_RemoteFileUrl">远程读取的文件URL</param>
            /// <returns>如果保存成功则返回 true,否则返回 false</returns>
            /// <remarks>
            /// 此方法仅供内部使用,由 ReplaceRemoteUrl 进行调用
            /// </remarks>
            private bool SaveRemoteFile(string s_LocalFileName, string s_RemoteFileUrl)
            {
                bool result = false;
                string AllowExt = ".jpe|.jpeg|.jpg|.png|.tif|.tiff|.bmp|.gif";
                //获取远程文件类型
                string sFileExt;
                sFileExt = s_RemoteFileUrl.Substring(s_RemoteFileUrl.LastIndexOf("."));
                if(AllowExt.IndexOf(sFileExt.ToLower()) == -1)
                {
                    result = false;
                }
                else
                {
    
                    using (System.Net.WebClient wc = new System.Net.WebClient())
                    {
                        //下载远程文件资源        
                        byte[] buff;
                        try
                        {
                            buff = wc.DownloadData(s_RemoteFileUrl);
                        }
                        catch
                        {
                            return false;
                        }
                        if (buff.Length == 0)
                            return false;
                        if (buff.Length / 1024 > 512000)
                            return false;
                        using (System.IO.FileStream fs = new System.IO.FileStream(sContentPath + sPath + s_LocalFileName, System.IO.FileMode.Create, System.IO.FileAccess.Write))
                        {
                            fs.Write(buff, 0, buff.Length);
                            fs.Close();
                        }
                    }
    
                    //加上水印图片
                    //try
                    //{
                    //    WebImages mark = new WebImages();
                    //    FileStream fs = new FileStream(sContentPath + sPath + s_LocalFileName, FileMode.Open,FileAccess.Read);
                    //    if(!mark.MakeWaterImage(fs, sContentPath + sPath + s_LocalFileName))
                    //    {
                    //        System.Drawing.Image img = System.Drawing.Image.FromStream(fs);
                    //        img.Save(sContentPath + sPath + s_LocalFileName);
                    //    }
                    //    fs.Close();
                    //    fs.Dispose();
                      
                    //    mark = null;
                    //}
                    //catch
                    //{
    
                    //}
                    
                    result = true;
                }
    
                return result;
            }
    
            /// <summary>
            /// 
            /// </summary>
            /// <param name="sign"></param>
            /// <returns></returns>
            private string CreateDateTimeDirectory(System.String sign)
            {
                string path = System.String.Empty;
                if(sign.Equals("0"))
                {
                    //不建立目录
                }
                else if(sign.Equals("1"))
                {
                    //以年为标志建立目录
                    path = DateTime.Now.Year.ToString();
                }
                else if(sign.Equals("2"))
                {
                    //以年-月为标志建立目录
                    path = System.String.Concat(DateTime.Now.Year.ToString(), "-", DateTime.Now.Month.ToString("00"));
                }
                else if(sign.Equals("3"))
                {
                    //以年-月-日为标志建立目录
                    path = System.String.Concat(DateTime.Now.Year.ToString(), "-", DateTime.Now.Month.ToString("00"), "-", DateTime.Now.Day.ToString("00"));
                }
                return path;
            }
    
        }
    
  • 相关阅读:
    ajax同步和异步
    vue组件
    type of的返回值有哪些
    git配置
    vue 获取时间戳对象转换为日期格式
    JavaScript运行机制
    单页面开发首屏加载慢,白屏如何解决
    单页面和多页面开发的优缺点
    【安全测试】sql注入
    【Python学习一】使用Python+selenium实现第一个自动化测试脚本
  • 原文地址:https://www.cnblogs.com/acyy/p/2662252.html
Copyright © 2011-2022 走看看