关于ASP.Net的导入导出的(2)
2006-07-03 20:51
579 查看
Com.urp.command.FileFrameWork(2)
昨天做到了UploadFileFrame,基本上上算是完成了上传的功能,今天继续做完下载的部分。Google上搜一下,关于asp.net下载的文章不在少数,所以也没有必要讨论怎么做了。在JSF中,下载是通过修改Response的header实现的,想想,ASP.net应该也能通过这种方法来做吧,果然找到了相关的文章。在博客园上就有,地址:http://www.cnblogs.com/Meyer/archive/2004/04/21/6977.aspx,而且人家是04年就写了,看看自己,原来还只是菜鸟一只:)
Java的代码:
HttpServletResponse response = (HttpServletResponse)getFacesContext().getExternalContext().getResponse();
response.reset();
response.setContentType("application/vnd.ms-excel");
response.setHeader("Content-Disposition", "attachment; filename=" + downloadFile.getFileAPIName() );
response.setContentLength(baos.size());
sos=response.getOutputStream();
baos.writeTo(sos);
sos.flush();
C#的代码:
_response.Clear();
_response.ContentType = _fileAPI.ContentType;
_response.AddHeader("Content-Disposition", "attachment; filename=" + _fileAPI.FileName);
_response.WriteFile(_fileAPI.Path);
_response.Flush();
_response.End();
发现,java和.Net真是惊人的相似。
注意点1
原来写的时候,这些代码是在controller层的,现在决定放进DownloadFileFram里,真正做到只需要调用一句execute就完成任务了:),但是要注意,需要传一个HttpContext.Current.Response进来。而且发现昨天的设计有点问题。在ExcelFile类的构造函数中传了一个fileType进去,其实完全没有必要,ExcelFile类肯定是对Excel文件操作的,文件类型自然也是定下来的了。
注意点2
上传文件的时IFileAPI是通过HttpPostedFile的ContentType来构造的,但下载文件的时候是通过FileInfo.Extension来构造的。所以又重新写了一个DownloadAPIFactory,用于在下载文件是构造IFileAPI,并且在IFileAPI增加了ContentType属性,在至于为什么不用简单工厂,是因为想到以后可能构造的时候需要去读xml的文件信息,通过xml来配置上传,下载的临时目录。为了让用户可以选择配置的方法,也许要用抽象Factory作为参数的,所以到时再写一个ConfingFactory也说不定,不知道考虑的是否正确。
注意点3
IFileAPI类中保存了FileType,ContentType这些和具体的文件类型有关的属性,LocalFile类中有一个和具体文件类型无关的Path属性。文件的简单的写入和读出都和文件类型无关,都在LocalFile中实现。所以还应该再有一个类实现IFileAPI,用来处理当文件类型不能识别时的上传下载。
外观层的类图现在修改如下:
FileType包的类图修改如下:
下载过程的序列图如下:
昨天做到了UploadFileFrame,基本上上算是完成了上传的功能,今天继续做完下载的部分。Google上搜一下,关于asp.net下载的文章不在少数,所以也没有必要讨论怎么做了。在JSF中,下载是通过修改Response的header实现的,想想,ASP.net应该也能通过这种方法来做吧,果然找到了相关的文章。在博客园上就有,地址:http://www.cnblogs.com/Meyer/archive/2004/04/21/6977.aspx,而且人家是04年就写了,看看自己,原来还只是菜鸟一只:)
Java的代码:
HttpServletResponse response = (HttpServletResponse)getFacesContext().getExternalContext().getResponse();
response.reset();
response.setContentType("application/vnd.ms-excel");
response.setHeader("Content-Disposition", "attachment; filename=" + downloadFile.getFileAPIName() );
response.setContentLength(baos.size());
sos=response.getOutputStream();
baos.writeTo(sos);
sos.flush();
C#的代码:
_response.Clear();
_response.ContentType = _fileAPI.ContentType;
_response.AddHeader("Content-Disposition", "attachment; filename=" + _fileAPI.FileName);
_response.WriteFile(_fileAPI.Path);
_response.Flush();
_response.End();
发现,java和.Net真是惊人的相似。
注意点1
原来写的时候,这些代码是在controller层的,现在决定放进DownloadFileFram里,真正做到只需要调用一句execute就完成任务了:),但是要注意,需要传一个HttpContext.Current.Response进来。而且发现昨天的设计有点问题。在ExcelFile类的构造函数中传了一个fileType进去,其实完全没有必要,ExcelFile类肯定是对Excel文件操作的,文件类型自然也是定下来的了。
注意点2
上传文件的时IFileAPI是通过HttpPostedFile的ContentType来构造的,但下载文件的时候是通过FileInfo.Extension来构造的。所以又重新写了一个DownloadAPIFactory,用于在下载文件是构造IFileAPI,并且在IFileAPI增加了ContentType属性,在至于为什么不用简单工厂,是因为想到以后可能构造的时候需要去读xml的文件信息,通过xml来配置上传,下载的临时目录。为了让用户可以选择配置的方法,也许要用抽象Factory作为参数的,所以到时再写一个ConfingFactory也说不定,不知道考虑的是否正确。
注意点3
IFileAPI类中保存了FileType,ContentType这些和具体的文件类型有关的属性,LocalFile类中有一个和具体文件类型无关的Path属性。文件的简单的写入和读出都和文件类型无关,都在LocalFile中实现。所以还应该再有一个类实现IFileAPI,用来处理当文件类型不能识别时的上传下载。
外观层的类图现在修改如下:
FileType包的类图修改如下:
下载过程的序列图如下:
相关文章推荐
- 关于ASP.Net的导入导出的(1)
- 关于ASP.Net的导入导出(3)
- 关于ASP.Net的导入导出(4)
- ASP.NET中使用开源组件NPOI快速导入导出Execl数据
- 关于asp.net导出Excel
- asp.net Excel导入和导出
- ASP.NET中导入和导出标准Excel文件
- 关于ASP.NET 将数据导出成Excel 的总结[中]
- 关于asp.net导出Excel时关联迅雷下载
- ASP.Net MVC利用NPOI导入导出Excel
- ExcelHelper(Excel和C#、asp.net导入导出,通用类)(一)
- [导入]关于asp.net中的etag和LastModified等header的设置
- [导入]关于asp.net Session丢失问题的总结
- ASP.NET- 使用NPOI导入导出标准Excel
- C#数据库数据导入导出系列之一 ASP.NET Excel导入Sql Server数据库 .
- 关于asp.net C# 导出Excel文件 打开Excel文件格式与扩展名指定格式不一致的解决办法
- asp.net(C#)excel导入导出类
- ASP.Net: EshineASPNet教程-EXCEL导入与导出
- asp.net Excel导入和导出
- ASP.NET Core 导入导出Excel xlsx 文件