ASP.NET中文件上传下载方法集合.doc
4星 · 超过85%的资源 需积分: 0 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中文件的上传和下载技术涵盖了从解决文件上传大小限制、以文件形式保存到服务器、转换为二进制字节流存储至数据库,到下载和上传互联网资源的各个方面,提供了丰富的功能和灵活性,以满足各种应用需求。
wywy_827
- 粉丝: 1
- 资源: 28