您的位置:首页 > 编程语言 > ASP

ASP.NET中常用的文件上传下载方法

2008-04-25 22:40 633 查看
ASP.NET中常用的文件上传下载方法 文件的上传下载是我们在实际项目开发过程中经常需要用到的技术,这里给出几种常见的方法,本文主要内容包括:

1、如何解决文件上传大小的限制

2、以文件形式保存到服务器

3、转换成二进制字节流保存到数据库以及下载方法

第一部分:

首先我们来说一下如何解决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里分块读取数据。实现方法如下:
IServiceProvider provider=(IServiceProvider) HttpContext.Current;

HttpWorkerRequest wr=(HttpWorkerRequest) provider.GetService(typeof(HttpWorkerRequest));

byte[]bs=wr.GetPreloadedEntityBody();

.

if(!wr.IsEntireEntityBodyIsPreloaded())

public class FileUpLoad

<?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)

public byte[] UpLoadFile(HtmlInputFile f_IFile)

<add verb="*" path="openfile.aspx" type="RuixinOA.Web.BaseClass.OpenFile, RuixinOA.Web"/>
这表示我打开openfile.aspx这个页面时,系统就会自动转到执行RuixinOA.Web.BaseClass.OpenFile 这个类里的方法,具体实现如下:

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;}

}

}

}
执行上面的方法后,系统会提示用户选择直接打开还是下载。这一部分我们就说到这里。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: