<span id="mktg5"></span>

<i id="mktg5"><meter id="mktg5"></meter></i>

        <label id="mktg5"><meter id="mktg5"></meter></label>
        最新文章專題視頻專題問答1問答10問答100問答1000問答2000關鍵字專題1關鍵字專題50關鍵字專題500關鍵字專題1500TAG最新視頻文章推薦1 推薦3 推薦5 推薦7 推薦9 推薦11 推薦13 推薦15 推薦17 推薦19 推薦21 推薦23 推薦25 推薦27 推薦29 推薦31 推薦33 推薦35 推薦37視頻文章20視頻文章30視頻文章40視頻文章50視頻文章60 視頻文章70視頻文章80視頻文章90視頻文章100視頻文章120視頻文章140 視頻2關鍵字專題關鍵字專題tag2tag3文章專題文章專題2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章專題3
        問答文章1 問答文章501 問答文章1001 問答文章1501 問答文章2001 問答文章2501 問答文章3001 問答文章3501 問答文章4001 問答文章4501 問答文章5001 問答文章5501 問答文章6001 問答文章6501 問答文章7001 問答文章7501 問答文章8001 問答文章8501 問答文章9001 問答文章9501
        當前位置: 首頁 - 科技 - 知識百科 - 正文

        ASP.NET中文件上傳下載方法集合

        來源:懂視網(wǎng) 責編:小采 時間:2020-11-27 22:45:55
        文檔

        ASP.NET中文件上傳下載方法集合

        ASP.NET中文件上傳下載方法集合:文件的上傳下載是我們在實際項目開發(fā)過程中經(jīng)常需要用到的技術,這里給出幾種常見的方法,本文主要內容包括: 1、如何解決文件上傳大小的限制 2、以文件形式保存到服務器 3、轉換成二進制字節(jié)流保存到數(shù)據(jù)庫以及下載方法 4、上傳Internet上的資源 第一部分
        推薦度:
        導讀ASP.NET中文件上傳下載方法集合:文件的上傳下載是我們在實際項目開發(fā)過程中經(jīng)常需要用到的技術,這里給出幾種常見的方法,本文主要內容包括: 1、如何解決文件上傳大小的限制 2、以文件形式保存到服務器 3、轉換成二進制字節(jié)流保存到數(shù)據(jù)庫以及下載方法 4、上傳Internet上的資源 第一部分

          文件的上傳下載是我們在實際項目開發(fā)過程中經(jīng)常需要用到的技術,這里給出幾種常見的方法,本文主要內容包括:

          1、如何解決文件上傳大小的限制
          2、以文件形式保存到服務器
          3、轉換成二進制字節(jié)流保存到數(shù)據(jù)庫以及下載方法
          4、上傳Internet上的資源

          第一部分:

            首先我們來說一下如何解決ASP.NET中的文件上傳大小限制的問題,我們知道在默認情況下ASP.NET的文件上傳大小限制為2M,一般情況下,我們可以采用更改WEB.Config文件來自定義最大文件大小,如下:

        <httpRuntime executionTimeout="300" maxRequestLength="40960" useFullyQualifiedRedirectUrl="false"/>

          這樣上傳文件的最大值就變成了4M,但這樣并不能讓我們無限的擴大MaxRequestLength的值,因為ASP.NET會將全部文件載入內存后,再加以處理。解決的方法是利用隱含的HttpWorkerRequest,用它的GetPreloadedEntityBody和ReadEntityBody方法從IIS為ASP.NET建立的pipe里分塊讀取數(shù)據(jù)。實現(xiàn)方法如下:

        IServiceProviderprovider=(IServiceProvider)HttpContext.Current;
        HttpWorkerRequestwr=(HttpWorkerRequest)provider.GetService(typeof(HttpWorkerRequest));
        byte[]bs=wr.GetPreloadedEntityBody();
        .
        if(!wr.IsEntireEntityBodyIsPreloaded())
        {
        intn=1024;
        byte[]bs2=newbyte[n];
        while(wr.ReadEntityBody(bs2,n)>0)
        {
        ..
        }
        }

          這樣就可以解決了大文件的上傳問題了。

          第二部分:

            下面我們來介紹如何以文件形式將客戶端的一個文件上傳到服務器并返回上傳文件的一些基本信息.首先我們定義一個類,用來存儲上傳的文件的信息(返回時需要)。

        public class FileUpLoad
        {
           public FileUpLoad()
           {

           }
        /**//// <summary>
                /// 上傳文件名稱
                /// </summary>
                public string FileName
                {
                    get
                    {
                        return fileName;
                    }
                    set
                    {
                        fileName = value;
                    }
                }
                private string fileName;

                /**//// <summary>
                /// 上傳文件路徑
                /// </summary>
                public string FilePath
                {
                    get
                    {
                        return filepath;
                    }
                    set
                    {
                        filepath = value;
                    }
                }
                private string filepath;

               
                /**//// <summary>
                /// 文件擴展名
                /// </summary>
                public string FileExtension
                {
                    get
                    {
                        return fileExtension;
                    }
                    set
                    {

                        fileExtension = value;
                    }

                }
                private string fileExtension;
        }

          另外我們還可以在配置文件中限制上傳文件的格式(App.Config):

        <?xml version="1.0" encoding="gb2312" ?>
        <Application>   
            <FileUpLoad>
               <Format>.jpg|.gif|.png|.bmp</Format>
            </FileUpLoad>
        </Application>

          這樣我們就可以開始寫我們的上傳文件的方法了,如下:

        public FileUpLoad UpLoadFile(HtmlInputFile InputFile,string filePath,string myfileName,bool isRandom)
                {

                    FileUpLoad fp = new FileUpLoad();

                    string fileName,fileExtension;
                    string saveName;

                    //
                    //建立上傳對象
                    //
                    HttpPostedFile postedFile = InputFile.PostedFile;

                    fileName        = System.IO.Path.GetFileName(postedFile.FileName);
                    fileExtension    = System.IO.Path.GetExtension(fileName);

                    //
                    //根據(jù)類型確定文件格式
                    //
                    AppConfig app = new AppConfig();
                    string format = app.GetPath("FileUpLoad/Format");


                    //
                    //如果格式都不符合則返回
                    //
                    if(format.IndexOf(fileExtension)==-1)
                    {
                        throw new ApplicationException("上傳數(shù)據(jù)格式不合法");
                    }

                    //
                    //根據(jù)日期和隨機數(shù)生成隨機的文件名
                    //
                    if(myfileName != string.Empty)
                    {
                        fileName = myfileName;           
                    }

                    if(isRandom)
                    {
                        Random objRand = new Random();
                        System.DateTime date = DateTime.Now;
                        //生成隨機文件名
                        saveName = date.Year.ToString() + date.Month.ToString() + date.Day.ToString() + date.Hour.ToString() + date.Minute.ToString()

                            + date.Second.ToString() + Convert.ToString(objRand.Next(99)*97 + 100);
                        fileName = saveName + fileExtension;
                    }

                    string phyPath = HttpContext.Current.Request.MapPath(filePath);


                    //判斷路徑是否存在,若不存在則創(chuàng)建路徑
                    DirectoryInfo upDir = new DirectoryInfo(phyPath);
                    if(!upDir.Exists)
                    {
                        upDir.Create();
                    }

                    //
                    //保存文件
                    //
                    try
                    {
                        postedFile.SaveAs(phyPath + fileName);

                        fp.FilePath =  filePath  + fileName;
                        fp.FileExtension = fileExtension;
                        fp.FileName = fileName;
                    }
                    catch
                    {
                        throw new ApplicationException("上傳失敗!");
                    }


                    //返回上傳文件的信息
                    return fp;
                }

          然后我們在上傳文件的時候就可以調用這個方法了,將返回的文件信息保存到數(shù)據(jù)庫中,至于下載,就直接打開那個路徑就OK了。

          第三部分:

            這里我們主要說一下如何以二進制的形式上傳文件以及下載。首先說上傳,方法如下:

        public byte[] UpLoadFile(HtmlInputFile f_IFile)
        {
         //獲取由客戶端指定的上傳文件的訪問
         HttpPostedFile upFile=f_IFile.PostedFile;
         //得到上傳文件的長度
                        int upFileLength=upFile.ContentLength;
         //得到上傳文件的客戶端MIME類型
                        string contentType = upFile.ContentType;
                        byte[] FileArray=new Byte[upFileLength];

                        Stream fileStream=upFile.InputStream;

                        fileStream.Read(FileArray,0,upFileLength);

        }

          這個方法返回的就是上傳的文件的二進制字節(jié)流,這樣我們就可以將它保存到數(shù)據(jù)庫了。下面說一下這種形式的下載,也許你會想到這種方式的下載就是新建一個aspx頁面,然后在它的Page_Load()事件里取出二進制字節(jié)流,然后再讀出來就可以了,其實這種方法是不可取的,在實際的運用中也許會出現(xiàn)無法打開某站點的錯誤,我一般采用下面的方法:

          首先,在Web.config中加入:

        <add verb="*" path="openfile.aspx" type="RuixinOA.Web.BaseClass.OpenFile, RuixinOA.Web"/>

          這表示我打開openfile.aspx這個頁面時,系統(tǒng)就會自動轉到執(zhí)行RuixinOA.Web.BaseClass.OpenFile 這個類里的方法,具體實現(xiàn)如下:

        using System;
        using System.Data;
        using System.Web;
        using System.IO;
        using Ruixin.WorkFlowDB;
        using RXSuite.Base;
        using RXSuite.Component;
        using RuixinOA.BusinessFacade;

        namespace RuixinOA.Web.BaseClass
        {
            /**//// <summary>
            /// NetUFile 的摘要說明。
            /// </summary>
            public class OpenFile : IHttpHandler
            {
                public void ProcessRequest(HttpContext context)
                {

                    //從數(shù)據(jù)庫中取出要下載的文件信息
                    RuixinOA.BusinessFacade.RX_OA_FileManager os = new RX_OA_FileManager();
                    EntityData data = os.GetFileDetail(id);

                    if(data != null && data.Tables["RX_OA_File"].Rows.Count > 0)
                    {
                        DataRow dr = (DataRow)data.Tables["RX_OA_File"].Rows[0];

                        context.Response.Buffer = true;
                        context.Response.Clear();
                        context.Response.ContentType = dr["CContentType"].ToString();
                        context.Response.AddHeader("Content-Disposition","attachment;filename=" + HttpUtility.UrlEncode(dr["CTitle"].ToString()));
                        context.Response.BinaryWrite((Byte[])dr["CContent"]);
                        context.Response.Flush();
                        context.Response.End();
                    }
                               

                }

                public bool IsReusable
                {

                    get { return true;}
                }
            }
        }

          執(zhí)行上面的方法后,系統(tǒng)會提示用戶選擇直接打開還是下載。這一部分我們就說到這里。

          第四部分:

            這一部分主要說如何上傳一個Internet上的資源到服務器。前面我們有一篇文章詳細介紹了使用方法,這里我不再多說。

          第五部分:總結

            今天簡單的介紹了幾種文件上傳與下載的方法,都是在實際的項目開發(fā)中經(jīng)常需要用到的,可能還有不完善的地方,希望大家可以互相交流一下項目開發(fā)中的經(jīng)驗。寫的不好的地方,請指正,謝謝!

        聲明:本網(wǎng)頁內容旨在傳播知識,若有侵權等問題請及時與本網(wǎng)聯(lián)系,我們將在第一時間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com

        文檔

        ASP.NET中文件上傳下載方法集合

        ASP.NET中文件上傳下載方法集合:文件的上傳下載是我們在實際項目開發(fā)過程中經(jīng)常需要用到的技術,這里給出幾種常見的方法,本文主要內容包括: 1、如何解決文件上傳大小的限制 2、以文件形式保存到服務器 3、轉換成二進制字節(jié)流保存到數(shù)據(jù)庫以及下載方法 4、上傳Internet上的資源 第一部分
        推薦度:
        • 熱門焦點

        最新推薦

        猜你喜歡

        熱門推薦

        專題
        Top
        主站蜘蛛池模板: 亚洲第一区香蕉_国产a| 亚洲人成网站色在线入口| 亚洲爆乳无码一区二区三区| 亚洲阿v天堂在线2017免费| 亚洲最大av无码网址| 久久www免费人成看国产片| 国产成人精品久久亚洲| 免费视频精品一区二区三区| 亚洲第一成年男人的天堂| 免费看污成人午夜网站| 亚洲熟妇无码一区二区三区导航| 日本免费中文字幕在线看| 色婷婷精品免费视频| 亚洲精品自在在线观看| 91精品国产免费| 亚洲人成网国产最新在线| 在线观看国产情趣免费视频| 中美日韩在线网免费毛片视频| 亚洲AV永久无码精品成人| 西西大胆无码视频免费| 亚洲AV色无码乱码在线观看| 国产精品亚洲不卡一区二区三区| 99视频免费在线观看| 亚洲一区二区三区无码国产 | 边摸边吃奶边做爽免费视频99| 亚洲人午夜射精精品日韩| 毛片免费在线观看| 国产99在线|亚洲| 亚洲А∨精品天堂在线| 久久精品私人影院免费看| 亚洲AV无码一区二区三区牛牛| 亚洲黄片手机免费观看| 久久久久国产精品免费看| 国产精品无码亚洲精品2021| 亚洲色婷婷综合久久| 在线观看免费成人| 另类免费视频一区二区在线观看| 久久久久精品国产亚洲AV无码| 亚洲综合区小说区激情区| 香蕉97超级碰碰碰免费公| 二区久久国产乱子伦免费精品|