Mine.Net

 

关于ASP.Net的导入导出的(2)

Com.urp.command.FileFrameWork2

昨天做到了UploadFileFrame,基本上上算是完成了上传的功能,今天继续做完下载的部分。Google上搜一下,关于asp.net下载的文章不在少数,所以也没有必要讨论怎么做了。在JSF中,下载是通过修改Responseheader实现的,想想,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是通过HttpPostedFileContentType来构造的,但下载文件的时候是通过FileInfo.Extension来构造的。所以又重新写了一个DownloadAPIFactory,用于在下载文件是构造IFileAPI,并且在IFileAPI增加了ContentType属性,在至于为什么不用简单工厂,是因为想到以后可能构造的时候需要去读xml的文件信息,通过xml来配置上传,下载的临时目录。为了让用户可以选择配置的方法,也许要用抽象Factory作为参数的,所以到时再写一个ConfingFactory也说不定,不知道考虑的是否正确。

注意点3

IFileAPI类中保存了FileType,ContentType这些和具体的文件类型有关的属性,LocalFile类中有一个和具体文件类型无关的Path属性。文件的简单的写入和读出都和文件类型无关,都在LocalFile中实现。所以还应该再有一个类实现IFileAPI,用来处理当文件类型不能识别时的上传下载。

外观层的类图现在修改如下:

 

    FileType包的类图修改如下:

    下载过程的序列图如下:

posted on 2006-07-03 20:51  whoisyorudady  阅读(2149)  评论(1编辑  收藏  举报

导航