ASP.NET中文件上传下载方法集合.doc

preview
4星 · 超过85%的资源 需积分: 0 239 下载量 55 浏览量 更新于2007-04-29 收藏 33KB DOC 举报
### ASP.NET中文件上传下载方法集合 #### 一、解决文件上传大小的限制 在ASP.NET中,默认的文件上传大小限制为2MB,这在处理大型文件上传时可能显得不足。为了解决这一限制,可以通过修改`Web.Config`文件自定义最大文件大小,将`maxRequestLength`属性设置为所需的值,例如将其设为4MB: ```xml <configuration> <system.web> <httpRuntime maxRequestLength="4096" /> </system.web> </configuration> ``` 但是,仅仅通过增加`maxRequestLength`值并不能解决所有问题,因为ASP.NET会将整个上传文件加载到内存中进行处理,这可能导致内存溢出。为了处理大文件,可以利用`HttpWorkerRequest`对象的`GetPreloadedEntityBody`和`ReadEntityBody`方法,从IIS为ASP.NET建立的管道中分块读取数据,避免一次性加载大量数据进入内存。 ```csharp IServiceProvider provider = (IServiceProvider)HttpContext.Current; HttpWorkerRequest wr = (HttpWorkerRequest)provider.GetService(typeof(HttpWorkerRequest)); byte[] bs = wr.GetPreloadedEntityBody(); if (!wr.IsEntireEntityBodyIsPreloaded()) { int n = 1024; byte[] bs2 = new byte[n]; while (wr.ReadEntityBody(bs2, n) > 0) { // 处理数据块 } } ``` #### 二、以文件形式保存到服务器 当需要将客户端的文件上传到服务器时,可以创建一个类如`FileUpLoad`,用于存储上传文件的基本信息,包括文件名、文件路径和文件扩展名。此外,可以在配置文件中限制上传文件的格式,如仅允许特定类型的图像文件上传: ```xml <?xml version="1.0" encoding="gb2312"?> <Application> <FileUpLoad> <Format>.jpg|.gif|.png|.bmp </Format> </FileUpLoad> </Application> ``` 上传文件的方法如下: ```csharp 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 (isRandom) { saveName = DateTime.Now.ToString("yyyyMMddHHmmss") + "_" + Guid.NewGuid().ToString() + fileExtension; } else { saveName = myfileName; } postedFile.SaveAs(System.IO.Path.Combine(filePath, saveName)); fp.FileName = fileName; fp.FilePath = System.IO.Path.Combine(filePath, saveName); fp.FileExtension = fileExtension; return fp; } ``` 该方法不仅上传文件,还验证了文件格式,并根据需求生成唯一的文件名,避免了同名文件覆盖的情况。 #### 三、转换成二进制字节流保存到数据库 除了将文件保存到服务器上的文件系统中,还可以将文件转换为二进制字节流存储在数据库中,这种方法适用于需要频繁访问或管理文件的场景。可以使用`FileStream`和`BinaryReader`或`MemoryStream`和`BinaryWriter`来完成文件与字节流之间的转换。 #### 四、下载方法 下载文件的方法通常涉及使用`HttpResponse`对象的`WriteFile`方法或创建一个包含文件内容的`FileStream`,然后使用`HttpResponse`对象的`BinaryWrite`方法将文件内容发送到客户端。 #### 五、上传Internet上的资源 上传互联网上的资源可能涉及到从远程URL下载文件并将其保存到本地服务器或数据库。这可以通过使用`HttpClient`或`WebClient`等类库实现。 以上所述,ASP.NET中文件的上传和下载技术涵盖了从解决文件上传大小限制、以文件形式保存到服务器、转换为二进制字节流存储至数据库,到下载和上传互联网资源的各个方面,提供了丰富的功能和灵活性,以满足各种应用需求。