zoukankan      html  css  js  c++  java
  • WebService上传文件到服务器(转)

    using System;
    using System.Data;
    using System.Configuration;
    using System.Linq;
    using System.Web;
    using System.Web.Security;
    using System.Web.UI;
    using System.Web.UI.HtmlControls;
    using System.Web.UI.WebControls;
    using System.Web.UI.WebControls.WebParts; 
    using System.IO;
    
    /// <summary>
    ///FileHelper 的摘要说明
    /// </summary>
    public class FileHelper
    {
        public static string TxtExtensions = "doc,docx,docm,dotx,dotm,txt,xml,rft,htm,html,mht,mhtml,wps,wtf";
        public static string XlsExtensions = "xls,xlsm,xlsb,xlsm,csv";
        public static string ImageExtensions = "jpg,jpeg,jpe,jfif,png,tif,tiff,gif,bmp,dib";
        public static string UpdateExtensions = "zip,rar";
    
        /// <summary>
        /// 保存文件
        /// </summary>
        /// <param name="fBitys"></param>
        /// <param name="fileName"></param>
        /// <param name="eMsg"></param>
        /// <returns></returns>
        public static bool SaveFile(byte[] fBitys, string fileName, ref string eMsg)
        {
            try
            {
                MemoryStream memoryStream = new MemoryStream(fBitys); //1.定义并实例化一个内存流,以存放提交上来的字节数组。
                FileStream fileUpload = new FileStream(fileName, FileMode.Create); ///2.定义实际文件对象,保存上载的文件。
                memoryStream.WriteTo(fileUpload); ///3.把内存流里的数据写入物理文件
                memoryStream.Close();
                fileUpload.Close();
                fileUpload = null;
                memoryStream = null;
                return true;
            }
            catch (Exception ex)
            {
                eMsg = ex.Message;
                return false;
            }
        }
    
        /// <summary>
        /// 文件类型
        /// </summary>
        public enum FileType
        {
            /// <summary>
            /// 文本文件
            /// </summary>
            Text,
            /// <summary>
            /// 图片文件
            /// </summary>
            Image,
            /// <summary>
            /// Excel文件
            /// </summary>
            Excel,
            /// <summary>
            /// 其他
            /// </summary>
            Other,
            UpdateFile
        }
    
    
        public static FileType GetFileType(string fileName)
        {
            string ext = Path.GetExtension(fileName);
            if (TxtExtensions.ToUpper().Contains(ext.ToUpper().Replace(".", "")) == true)
            {
                return FileType.Text;
            }
            else if (XlsExtensions.ToUpper().Contains(ext.ToUpper().Replace(".", "")) == true)
            {
                return FileType.Excel;
            }
            else if (ImageExtensions.ToUpper().Contains(ext.ToUpper().Replace(".", "")) == true)
            {
                return FileType.Image;
            }
            else if (UpdateExtensions.ToUpper().Contains(ext.ToUpper().Replace(".", "")) == true)
            {
                return FileType.UpdateFile;
            }
            else
            {
                return FileType.Other;
            }
        }
    
        public static System.Collections.Generic.Dictionary<FileType, string> filePathDic = new System.Collections.Generic.Dictionary<FileType, string>();
        public static string GetFilePath(FileType fType)
        {
            try
            {
                if (filePathDic.Keys.Contains(fType) == true)
                {
                    return filePathDic[fType];
                }
                else
                {
                    string filePath = "";
                    switch (fType)
                    {
                        case FileType.Excel:
                            filePath = ConfigurationSettings.AppSettings["ExcelFilePath"];
                            break;
                        case FileType.Image:
                            filePath = ConfigurationSettings.AppSettings["ImageFilePath"];
                            break;
                        case FileType.Other:
                            filePath = ConfigurationSettings.AppSettings["OtherFilePath"];
                            break;
                        case FileType.Text:
                            filePath = ConfigurationSettings.AppSettings["TextFilePath"];
                            break;
                        case FileType.UpdateFile:
                            filePath = ConfigurationSettings.AppSettings["UpdateFilePath"];
                            break;
                    }
                    if (string.IsNullOrEmpty(filePath))
                    {
                        return "";
                    }
                    else
                    {
                        filePathDic[fType] = filePath;
                        return filePath;
                    }
                }
            }
            catch
            {
                return "";
            }
        }
    }
    
    定义WebService方法
    
    
    
    [WebMethod]
        public string UploadFile(byte[] fBytes, string fileName, ref string eMsg)
        {
            try
            {
                FileHelper.FileType ft = FileHelper.GetFileType(fileName);
                string saveName = DateTime.Now.ToString("yyyyMMddHHmmssffffff") + ((int)((new Random()).NextDouble() * 1000000)).ToString() + Path.GetExtension(fileName);
                string savePath = "";
                switch (ft)
                {
                    case FileHelper.FileType.Excel:
                        savePath = System.Configuration.ConfigurationManager.AppSettings["ExcelFilePath"] + "\" + saveName;
                        break;
                    case FileHelper.FileType.Image:
                        savePath = System.Configuration.ConfigurationManager.AppSettings["ImageFilePath"] + "\" + saveName;
                        break;
                    case FileHelper.FileType.Text:
                        savePath = System.Configuration.ConfigurationManager.AppSettings["TextFilePath"] + "\" + saveName;
                        break;
                    case FileHelper.FileType.UpdateFile:
                        savePath = System.Configuration.ConfigurationManager.AppSettings["UpdateFilePath"] + "\" + fileName;
                        break;
                    case FileHelper.FileType.Other:
                        savePath = System.Configuration.ConfigurationManager.AppSettings["OtherFilePath"] + "\" + saveName;
                        break;
                }
    
    
                MemoryStream memoryStream = new MemoryStream(fBytes); //1.定义并实例化一个内存流,以存放提交上来的字节数组。
                FileStream fileUpload = new FileStream(savePath, FileMode.Create); ///2.定义实际文件对象,保存上载的文件。
                memoryStream.WriteTo(fileUpload); ///3.把内存流里的数据写入物理文件
                memoryStream.Close();
                fileUpload.Close();
                fileUpload = null;
                memoryStream = null;
    
                //获取IP地址
                System.Net.IPHostEntry entry = System.Net.Dns.GetHostEntry(System.Net.Dns.GetHostName());
                System.Net.IPAddress[] addrs = entry.AddressList;
                string ipAddress = "";
                if (addrs.Length > 0)
                {
                    foreach (System.Net.IPAddress ipAddr in addrs)
                    {
                        if (ipAddr.AddressFamily == System.Net.Sockets.AddressFamily.InterNetwork)
                        {
                            ipAddress = ipAddr.ToString();
                            break;
                        }
                    }
                    if (ipAddress == "")
                        ipAddress = addrs[0].ToString();
                }
                if (ft == FileHelper.FileType.UpdateFile)
                {
                    return string.Format("http://{0}{1}/getUpdateFile.ashx?fn={2}", ipAddress, Server.HtmlEncode(HttpContext.Current.Request.ApplicationPath), fileName);
                }
                else
                {
                    return string.Format("http://{0}{1}/ShowImage.ashx?fn={2}", ipAddress, Server.HtmlEncode(HttpContext.Current.Request.ApplicationPath), saveName);
                }
            }
            catch (Exception ex)
            {
                eMsg = ex.Message;
                return "";
            }
        }
    
    以上方法返回一个服务器路径,其中ShowImage.ashx这个页面用于显示图片,getUpdateFile.ashx这个页面用于下载文件,代码如下:
    
    
    
    public class ShowImage : IHttpHandler
    {
        public static string FilePath = FileHelper.GetFilePath(FileHelper.FileType.Image);
        public void ProcessRequest(HttpContext context)
        {
            string fileName = context.Request.QueryString["fn"];
    
            fileName = FilePath + "\" + fileName;
            context.Response.ContentType = "image/JPEG";
            try
            {
                context.Response.WriteFile(fileName);
                context.Response.Flush();
            }
            catch (Exception ex)
            {
                context.Response.Write(ex.Message);
            }
        }
    
        public bool IsReusable
        {
            get
            {
                return false;
            }
        }
    
    }
    
    
    
    public class getUpdateFile : IHttpHandler
    {
    
        public void ProcessRequest(HttpContext context)
        {
            string fileName = context.Request.QueryString["fn"];
    
            context.Response.ContentType = "application/octet-stream";
            //通知浏览器下载文件而不是打开
            context.Response.AddHeader("Content-Disposition", "attachment; filename=" + HttpUtility.UrlEncode(fileName, System.Text.Encoding.UTF8));
            try
            {
                if (!string.IsNullOrEmpty(fileName))
                {
                    string filePath = FileHelper.GetFilePath(FileHelper.FileType.UpdateFile) + "\" + fileName;//路径
    
                    //以字符流的形式下载文件
                    byte[] bytes = null;
                    using (System.IO.FileStream fs = new System.IO.FileStream(filePath, System.IO.FileMode.Open))
                    {
                        bytes = new byte[(int)fs.Length];
                        fs.Read(bytes, 0, bytes.Length);
                        fs.Close();
                    }
                    context.Response.BinaryWrite(bytes);
    
                }
            }
            catch
            {
            }
            context.Response.Flush();
            context.Response.End();
        }
    
        public bool IsReusable
        {
            get
            {
                return false;
            }
        }
    
    }
    
    客户端代码
    
    
    
     public static string UpLoadFile(string fileName, ref string eMsg)
            {
               //wms:WebService
                if (wms == null)
                {
                    wms = new Service();
                }
                byte[] fByte;
                
                fByte = File.ReadAllBytes(fileName);
    
                return wms.UploadFile(fByte, fileName, ref eMsg);
            }

    转载:http://www.360doc.com/content/13/1202/09/14880949_333799494.shtml

  • 相关阅读:
    C++ 设计模式 —— 訪问者(Visitor)
    图解IIS配置过程
    JSBridge
    10大H5前端框架,让你开发不愁
    具体解释java中的volatilekeyword
    网速变慢解决方法.Tracert与PathPing(转)
    最快下载速度100Mbps!4G LTE技术全解析
    Windows客户端的JProfiler远程监控Linux上的Tomcat
    Java内存泄露原因详解
    JProfiler 解决 Java 服务器的性能跟踪
  • 原文地址:https://www.cnblogs.com/li-fei/p/3455156.html
Copyright © 2011-2022 走看看