上传下载

180人阅读 评论(1) 收藏 举报

       最近在网上看到了这篇”ASP.NET中常用的文件上传下载方法 “文章,觉得不错,分享给大家。

文件的上传下载是我们在实际项目开发过程中经常需要用到的技术,这里给出几种常见的方法,本文主要内容包括:

1、如何解决文件上传大小的限制
2、以文件形式保存到 服务器
3、转换成二进制字节流保存到 数据库以及下载方法
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里分块读取数据。实现方法如下:
  1. <PRE class=csharp name="code">IServiceProviderprovider=(IServiceProvider)HttpContext.Current;  
  2. HttpWorkerRequestwr=(HttpWorkerRequest)provider.GetService(typeof(HttpWorkerRequest));  
  3. byte[]bs=wr.GetPreloadedEntityBody();  
  4. if(!wr.IsEntireEntityBodyIsPreloaded())  
  5. {  
  6. intn=1024;  
  7. byte[]bs2=newbyte[n];  
  8. while(wr.ReadEntityBody(bs2,n)>0)  
  9. {  
  10.    ..  
  11. }  
  12. }</PRE>  
  13. <PRE></PRE>  
  14. <P>这样就可以解决了大文件的上传问题了。</P>  
  15. <SPAN style="COLOR: #ff0000">第二部分:</SPAN>    下面我们来介绍如何以文件形式将客户端的一个文件上传到服务器并返回上传文件的一些基本信息首先我们定义一个类,用来存储上传的文件的信息(返回时需要)。<PRE class=csharp name="code">public class FileUpLoad  
  16. {  
  17.    public FileUpLoad()  
  18.    {  
  19.   
  20.    }  
  21. /**//// <summary>  
  22.         /// 上传文件名称   
  23.         /// </summary>   
  24.         public string FileName  
  25.         {  
  26.             get  
  27.             {  
  28.                 return fileName;  
  29.             }  
  30.             set  
  31.             {  
  32.                 fileName = value;  
  33.             }  
  34.         }  
  35.         private string fileName;  
  36.   
  37.         /**//// <summary>  
  38.         /// 上传文件路径   
  39.         /// </summary>   
  40.         public string FilePath  
  41.         {  
  42.             get  
  43.             {  
  44.                 return filepath;  
  45.             }  
  46.             set  
  47.             {  
  48.                 filepath = value;  
  49.             }  
  50.         }  
  51.         private string filepath;  
  52.   
  53.           
  54.         /**//// <summary>  
  55.         /// 文件扩展名   
  56.         /// </summary>   
  57.         public string FileExtension  
  58.         {  
  59.             get  
  60.             {  
  61.                 return fileExtension;  
  62.             }  
  63.             set  
  64.             {  
  65.               
  66.                 fileExtension = value;  
  67.             }  
  68.                   
  69.         }  
  70.         private string fileExtension;  
  71. }</PRE>另外我们还可以在配置文件中限制上传文件的格式(App.Config):<BR>  
  72. <PRE class=csharp name="code"><?xml version="1.0" encoding="gb2312" ?>  
  73. <Application>      
  74.     <FileUpLoad>  
  75.        <Format>.jpg|.gif|.png|.bmp</Format>  
  76.     </FileUpLoad>  
  77. </Application>  
  78. 这样我们就可以开始写我们的上传文件的方法了,如下:  
  79. public FileUpLoad UpLoadFile(HtmlInputFile InputFile,string filePath,string myfileName,bool isRandom)  
  80.         {     
  81.             FileUpLoad fp = new FileUpLoad();  
  82.   
  83.             string fileName,fileExtension;  
  84.             string saveName;  
  85.             //   
  86.             //建立上传对象   
  87.             //   
  88.             HttpPostedFile postedFile = InputFile.PostedFile;  
  89.             fileName        = System.IO.Path.GetFileName(postedFile.FileName);  
  90.             fileExtension    = System.IO.Path.GetExtension(fileName);    
  91.             //   
  92.             //根据类型确定文件格式   
  93.             //   
  94.             AppConfig app = new AppConfig();  
  95.             string format = app.GetPath("FileUpLoad/Format");  
  96.   
  97.   
  98.             //   
  99.             //如果格式都不符合则返回   
  100.             //   
  101.             if(format.IndexOf(fileExtension)==-1)  
  102.             {  
  103.                 throw new ApplicationException("上传数据格式不合法");  
  104.             }  
  105.             //   
  106.             //根据日期和随机数生成随机的文件名   
  107.             //   
  108.             if(myfileName != string.Empty)  
  109.             {  
  110.                 fileName = myfileName;              
  111.             }  
  112.             if(isRandom)  
  113.             {  
  114.                 Random objRand = new Random();  
  115.                 System.DateTime date = DateTime.Now;  
  116.                 //生成随机文件名   
  117.                 saveName = date.Year.ToString() + date.Month.ToString() + date.Day.ToString() + date.Hour.ToString() + date.Minute.ToString()  
  118.                     + date.Second.ToString() + Convert.ToString(objRand.Next(99)*97 + 100);  
  119.                 fileName = saveName + fileExtension;  
  120.             }  
  121.             string phyPath = HttpContext.Current.Request.MapPath(filePath);  
  122.             //判断路径是否存在,若不存在则创建路径   
  123.             DirectoryInfo upDir = new DirectoryInfo(phyPath);  
  124.             if(!upDir.Exists)  
  125.             {  
  126.                 upDir.Create();  
  127.             }  
  128.             //   
  129.             //保存文件   
  130.             //   
  131.             try  
  132.             {  
  133.                 postedFile.SaveAs(phyPath + fileName);  
  134.                 fp.FilePath =  filePath  + fileName;  
  135.                 fp.FileExtension = fileExtension;  
  136.                 fp.FileName = fileName;  
  137.             }  
  138.             catch  
  139.             {  
  140.                 throw new ApplicationException("上传失败!");  
  141.             }  
  142.             //返回上传文件的信息   
  143.             return fp;  
  144.         }</PRE>然后我们在上传文件的时候就可以调用这个方法了,将返回的文件信息保存到数据库中,至于下载,就直接打开那个路径就OK了。<BR>  
  145. <SPAN style="COLOR: #ff0000"><BR>  
  146. 第三部分:</SPAN><BR>  
  147.     这里我们主要说一下如何以二进制的形式上传文件以及下载。首先说上传,方法如下:<BR>  
  148. <PRE class=csharp name="code">public byte[] UpLoadFile(HtmlInputFile f_IFile)  
  149. {  
  150.          //获取由客户端指定的上传文件的访问   
  151.          HttpPostedFile upFile=f_IFile.PostedFile;  
  152.          //得到上传文件的长度   
  153.          int upFileLength=upFile.ContentLength;   
  154.          //得到上传文件的客户端MIME类型   
  155.          string contentType = upFile.ContentType;  
  156.          byte[] FileArray=new Byte[upFileLength];  
  157.          Stream fileStream=upFile.InputStream;     
  158.          fileStream.Read(FileArray,0,upFileLength);  
  159.          return FileArray;  
  160. }</PRE>这个方法返回的就是上传的文件的二进制字节流,这样我们就可以将它保存到数据库了。下面说一下这种形式的下载,也许你会想到这种方式的下载就是新建一个<SPAN class=t_tag>asp</SPAN>x页面,然后在它的Page_Load()事件里取出二进制字节流,然后再读出来就可以了,其实这种方法是不可取的,在实际的运用中也许会出现无法打开某站点的错误,我一般采用下面的方法:<BR>  
  161. 首先,在Web.config中加入:<BR>  
  162. <add verb="*" path="openfile.aspx" type="Ruixin<SPAN class=t_tag>OA</SPAN>.Web.BaseClass.OpenFile, RuixinOA.Web"/><BR>  
  163. 这表示我打开openfile.aspx这个页面时,<SPAN class=t_tag>系统</SPAN>就会自动转到执行RuixinOA.Web.BaseClass.OpenFile 这个类里的方法,具体实现如下:<BR>  
  164. <PRE class=csharp name="code">using System;  
  165. using System.Data;  
  166. using System.Web;  
  167. using System.IO;  
  168. using Ruixin.WorkFlowDB;  
  169. using RXSuite.Base;  
  170. using RXSuite.Component;  
  171. using RuixinOA.BusinessFacade;  
  172.   
  173. namespace RuixinOA.Web.BaseClass  
  174. {  
  175.     /**//// <summary>  
  176.     /// NetUFile 的摘要说明。   
  177.     /// </summary>   
  178.     public class OpenFile : IHttpHandler  
  179.     {  
  180.         public void ProcessRequest(HttpContext context)   
  181.         {     
  182.             //从数据库中取出要下载的文件信息   
  183.             RuixinOA.BusinessFacade.RX_OA_FileManager os = new RX_OA_FileManager();  
  184.             EntityData data = os.GetFileDetail(id);  
  185.             if(data != null && data.Tables["RX_OA_File"].Rows.Count > 0)  
  186.             {  
  187.                 DataRow dr = (DataRow)data.Tables["RX_OA_File"].Rows[0];  
  188.                 context.Response.Buffer = true;  
  189.                 context.Response.Clear();  
  190.                 context.Response.ContentType = dr["CContentType"].ToString();   
  191.                 context.Response.AddHeader("Content-Disposition","attachment;filename=" + HttpUtility.UrlEncode(dr["CTitle"].ToString()));  
  192.                 context.Response.BinaryWrite((Byte[])dr["CContent"]);  
  193.                 context.Response.Flush();  
  194.                 context.Response.End();  
  195.             }               
  196.         }  
  197.        public bool IsReusable   
  198.         {   
  199.             get { return true;}   
  200.         }  
  201.     }  
  202. }</PRE>  
  203. <P>执行上面的方法后,系统会提示用户选择直接打开还是下载。这一部分我们就说到这里。</P>  
  204. <SPAN style="COLOR: rgb(255,0,0)">第四部分:</SPAN><BR>  
  205.     这一部分主要说如何上传一个Internet上的资源到服务器。前面我们有一篇文章详细介绍了使用方法,这里我不再多说。<BR>  
  206. 请参考:将动态页面转化成二进制字节流 <BR>  
  207. <SPAN style="COLOR: #ff0000">第五部分:总结</SPAN><BR>  
  208.     今天简单的介绍了几种文件上传与下载的方法,都是在实际的项目开发中经常需要用到的,可能还有不完善的地方,希望大家可以互相交流一下项目开发中的经验。写的不好的地方,请指正,谢谢  
  209. <PRE></PRE>  

   
   
[csharp] view plain copy print ?
  1. IServiceProviderprovider=(IServiceProvider)HttpContext.Current;  
  2. HttpWorkerRequestwr=(HttpWorkerRequest)provider.GetService(typeof(HttpWorkerRequest));  
  3. byte[]bs=wr.GetPreloadedEntityBody();  
  4. if(!wr.IsEntireEntityBodyIsPreloaded())  
  5. {  
  6. intn=1024;  
  7. byte[]bs2=newbyte[n];  
  8. while(wr.ReadEntityBody(bs2,n)>0)  
  9. {  
  10.    ..  
  11. }  
  12. }  

这样就可以解决了大文件的上传问题了。

第二部分:    下面我们来介绍如何以文件形式将客户端的一个文件上传到服务器并返回上传文件的一些基本信息首先我们定义一个类,用来存储上传的文件的信息(返回时需要)。
  1. public class FileUpLoad  
  2. {  
  3.    public FileUpLoad()  
  4.    {  
  5.   
  6.    }  
  7. /**//// <summary>  
  8.         /// 上传文件名称   
  9.         /// </summary>   
  10.         public string FileName  
  11.         {  
  12.             get  
  13.             {  
  14.                 return fileName;  
  15.             }  
  16.             set  
  17.             {  
  18.                 fileName = value;  
  19.             }  
  20.         }  
  21.         private string fileName;  
  22.   
  23.         /**//// <summary>  
  24.         /// 上传文件路径   
  25.         /// </summary>   
  26.         public string FilePath  
  27.         {  
  28.             get  
  29.             {  
  30.                 return filepath;  
  31.             }  
  32.             set  
  33.             {  
  34.                 filepath = value;  
  35.             }  
  36.         }  
  37.         private string filepath;  
  38.   
  39.           
  40.         /**//// <summary>  
  41.         /// 文件扩展名   
  42.         /// </summary>   
  43.         public string FileExtension  
  44.         {  
  45.             get  
  46.             {  
  47.                 return fileExtension;  
  48.             }  
  49.             set  
  50.             {  
  51.               
  52.                 fileExtension = value;  
  53.             }  
  54.                   
  55.         }  
  56.         private string fileExtension;  
  57. }  
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):
  1. <?xml version="1.0" encoding="gb2312" ?>  
  2. <Application>      
  3.     <FileUpLoad>  
  4.        <Format>.jpg|.gif|.png|.bmp</Format>  
  5.     </FileUpLoad>  
  6. </Application>  
  7. 这样我们就可以开始写我们的上传文件的方法了,如下:  
  8. public FileUpLoad UpLoadFile(HtmlInputFile InputFile,string filePath,string myfileName,bool isRandom)  
  9.         {     
  10.             FileUpLoad fp = new FileUpLoad();  
  11.   
  12.             string fileName,fileExtension;  
  13.             string saveName;  
  14.             //   
  15.             //建立上传对象   
  16.             //   
  17.             HttpPostedFile postedFile = InputFile.PostedFile;  
  18.             fileName        = System.IO.Path.GetFileName(postedFile.FileName);  
  19.             fileExtension    = System.IO.Path.GetExtension(fileName);    
  20.             //   
  21.             //根据类型确定文件格式   
  22.             //   
  23.             AppConfig app = new AppConfig();  
  24.             string format = app.GetPath("FileUpLoad/Format");  
  25.   
  26.   
  27.             //   
  28.             //如果格式都不符合则返回   
  29.             //   
  30.             if(format.IndexOf(fileExtension)==-1)  
  31.             {  
  32.                 throw new ApplicationException("上传数据格式不合法");  
  33.             }  
  34.             //   
  35.             //根据日期和随机数生成随机的文件名   
  36.             //   
  37.             if(myfileName != string.Empty)  
  38.             {  
  39.                 fileName = myfileName;              
  40.             }  
  41.             if(isRandom)  
  42.             {  
  43.                 Random objRand = new Random();  
  44.                 System.DateTime date = DateTime.Now;  
  45.                 //生成随机文件名   
  46.                 saveName = date.Year.ToString() + date.Month.ToString() + date.Day.ToString() + date.Hour.ToString() + date.Minute.ToString()  
  47.                     + date.Second.ToString() + Convert.ToString(objRand.Next(99)*97 + 100);  
  48.                 fileName = saveName + fileExtension;  
  49.             }  
  50.             string phyPath = HttpContext.Current.Request.MapPath(filePath);  
  51.             //判断路径是否存在,若不存在则创建路径   
  52.             DirectoryInfo upDir = new DirectoryInfo(phyPath);  
  53.             if(!upDir.Exists)  
  54.             {  
  55.                 upDir.Create();  
  56.             }  
  57.             //   
  58.             //保存文件   
  59.             //   
  60.             try  
  61.             {  
  62.                 postedFile.SaveAs(phyPath + fileName);  
  63.                 fp.FilePath =  filePath  + fileName;  
  64.                 fp.FileExtension = fileExtension;  
  65.                 fp.FileName = fileName;  
  66.             }  
  67.             catch  
  68.             {  
  69.                 throw new ApplicationException("上传失败!");  
  70.             }  
  71.             //返回上传文件的信息   
  72.             return fp;  
  73.         }  
<?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);  
            //
            //根据类型确定文件格式
            //
            AppConfig app = new AppConfig();
            string format = app.GetPath("FileUpLoad/Format");


            //
            //如果格式都不符合则返回
            //
            if(format.IndexOf(fileExtension)==-1)
            {
                throw new ApplicationException("上传数据格式不合法");
            }
            //
            //根据日期和随机数生成随机的文件名
            //
            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);
            //判断路径是否存在,若不存在则创建路径
            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;
        }
然后我们在上传文件的时候就可以调用这个方法了,将返回的文件信息保存到数据库中,至于下载,就直接打开那个路径就OK了。

第三部分:

    这里我们主要说一下如何以二进制的形式上传文件以及下载。首先说上传,方法如下:
  1. public byte[] UpLoadFile(HtmlInputFile f_IFile)  
  2. {  
  3.          //获取由客户端指定的上传文件的访问   
  4.          HttpPostedFile upFile=f_IFile.PostedFile;  
  5.          //得到上传文件的长度   
  6.          int upFileLength=upFile.ContentLength;   
  7.          //得到上传文件的客户端MIME类型   
  8.          string contentType = upFile.ContentType;  
  9.          byte[] FileArray=new Byte[upFileLength];  
  10.          Stream fileStream=upFile.InputStream;     
  11.          fileStream.Read(FileArray,0,upFileLength);  
  12.          return FileArray;  
  13. }  
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);
         return FileArray;
}
这个方法返回的就是上传的文件的二进制字节流,这样我们就可以将它保存到数据库了。下面说一下这种形式的下载,也许你会想到这种方式的下载就是新建一个aspx页面,然后在它的Page_Load()事件里取出二进制字节流,然后再读出来就可以了,其实这种方法是不可取的,在实际的运用中也许会出现无法打开某站点的错误,我一般采用下面的方法:
首先,在Web.config中加入:
<add verb="*" path="openfile.aspx" type="RuixinOA.Web.BaseClass.OpenFile, RuixinOA.Web"/>
这表示我打开openfile.aspx这个页面时,系统就会自动转到执行RuixinOA.Web.BaseClass.OpenFile 这个类里的方法,具体实现如下:
  1. using System;  
  2. using System.Data;  
  3. using System.Web;  
  4. using System.IO;  
  5. using Ruixin.WorkFlowDB;  
  6. using RXSuite.Base;  
  7. using RXSuite.Component;  
  8. using RuixinOA.BusinessFacade;  
  9.   
  10. namespace RuixinOA.Web.BaseClass  
  11. {  
  12.     /**//// <summary>  
  13.     /// NetUFile 的摘要说明。   
  14.     /// </summary>   
  15.     public class OpenFile : IHttpHandler  
  16.     {  
  17.         public void ProcessRequest(HttpContext context)   
  18.         {     
  19.             //从数据库中取出要下载的文件信息   
  20.             RuixinOA.BusinessFacade.RX_OA_FileManager os = new RX_OA_FileManager();  
  21.             EntityData data = os.GetFileDetail(id);  
  22.             if(data != null && data.Tables["RX_OA_File"].Rows.Count > 0)  
  23.             {  
  24.                 DataRow dr = (DataRow)data.Tables["RX_OA_File"].Rows[0];  
  25.                 context.Response.Buffer = true;  
  26.                 context.Response.Clear();  
  27.                 context.Response.ContentType = dr["CContentType"].ToString();   
  28.                 context.Response.AddHeader("Content-Disposition","attachment;filename=" + HttpUtility.UrlEncode(dr["CTitle"].ToString()));  
  29.                 context.Response.BinaryWrite((Byte[])dr["CContent"]);  
  30.                 context.Response.Flush();  
  31.                 context.Response.End();  
  32.             }               
  33.         }  
  34.        public bool IsReusable   
  35.         {   
  36.             get { return true;}   
  37.         }  
  38.     }  
  39. }  
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) 
        {   
            //从数据库中取出要下载的文件信息
            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;} 
        }
    }
}

执行上面的方法后,系统会提示用户选择直接打开还是下载。这一部分我们就说到这里。

第四部分:
    这一部分主要说如何上传一个Internet上的资源到服务器。前面我们有一篇文章详细介绍了使用方法,这里我不再多说。
请参考:将动态页面转化成二进制字节流
第五部分:总结
    今天简单的介绍了几种文件上传与下载的方法,都是在实际的项目开发中经常需要用到的,可能还有不完善的地方,希望大家可以互相交流一下项目开发中的经验。写的不好的地方,请指正,谢谢


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Spring MVC是一个基于Java的开源框架,用于构建Web应用程序。它提供了一种模型-视图-控制器(MVC)的架构模式,用于将应用程序的不同部分分离开来,以实现更好的可维护性和可扩展性。 下面是一个简单的Spring MVC上传下载的实例: 1. 配置文件: 首先,在Spring MVC的配置文件中添加以下配置: ```xml <!-- 配置文件上传 --> <bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver"> <property name="maxUploadSize" value="10485760"/> <!-- 设置最大上传文件大小为10MB --> </bean> ``` 2. 控制器: 创建一个控制器,用于处理上传和下载请求。以下是一个示例: ```java @Controller public class FileController { @RequestMapping(value = "/upload", method = RequestMethod.POST) public String uploadFile(@RequestParam("file") MultipartFile file) { // 处理文件上传逻辑 if (!file.isEmpty()) { try { byte[] bytes = file.getBytes(); // 保存文件到服务器或者其他操作 return "redirect:/success"; // 上传成功后跳转到成功页面 } catch (IOException e) { e.printStackTrace(); } } return "redirect:/error"; // 上传失败后跳转到错误页面 } @RequestMapping(value = "/download", method = RequestMethod.GET) public ResponseEntity<Resource> downloadFile() { // 处理文件下载逻辑 // 构建文件资源对象 Resource fileResource = new FileSystemResource("path/to/file"); // 设置响应头 HttpHeaders headers = new HttpHeaders(); headers.add(HttpHeaders.CONTENT_DISPOSITION, "attachment; filename=file.txt"); // 返回文件资源和响应头 return ResponseEntity.ok() .headers(headers) .contentLength(fileResource.contentLength()) .contentType(MediaType.APPLICATION_OCTET_STREAM) .body(fileResource); } } ``` 3. 前端页面: 在前端页面中添加上传和下载的表单和按钮。以下是一个简单的示例: ```html <form action="/upload" method="post" enctype="multipart/form-data"> <input type="file" name="file" /> <input type="submit" value="上传" /> </form> <a href="/download">下载文件</a> ``` 这是一个简单的Spring MVC上传下载的实例。你可以根据实际需求进行修改和扩展。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值