2011-06-14 87 views
3

如何在Action类的​​方法中读取上传文件的内容?我能够在服务器上上传文件,但不知道如何阅读该文件的内容。在Struts2中读取上传文件的内容

我们必须先将它保存在服务器上吗?或者我们可以直接阅读吗?

+2

你说你可以上传文件到服务器......这是否意味着文件已经在服务器上?你的意思是你提供了一个允许用户上传内容的操作,或者你已经放置了一个文件并想读取它的服务器上有一个文件夹? – Quaternion 2011-06-15 05:14:47

回答

4

选项1:创建一个servlet

我建议你使用Apache的百科全书file upload。此链接提供了有关如何使用FileItem来处理上载文件(将其写入磁盘或在文件大小足够小的情况下在内存中读取它)的示例。另一个相关的例子可以找到here

选项2:使用Struts标签s:file

正如@BalusC下面支柱的评论中提到有一个内置的使用s:file标签库和使用它的教程文件上传过程提供here。基本上文件被上传到一个临时目录。但是,您可以通过为default.properties文件中的struts.multipart.saveDir属性设置值来覆盖该值。此链接还提到使用Apache FileUtils来处理上传的文件,顺便说一句,这是任何文件I/O工作的非常方便的库。

+1

我不做Struts2,但我想象一下,有一点MVC框架内置了这个设施,当然如果它是Apache框架的话。我在mkyong.com上偷看了一下,发现这个:http://www.mkyong.com/struts2/struts-2-file-upload-example/引入Apache Commons FileUpload有点矫枉过正。 – BalusC 2011-06-14 22:40:38

+0

@BalusC感谢 - 这是使用':file'标签和apache'FileUtils'类的文件上传过程的良好链接。虽然链接没有明确解释如何处理文件,但我认为这部分应该是微不足道的。你介意把它作为答案吗?我可以删除我的帖子,因为看起来OP应该使用struts提供的文件上传程序。 – CoolBeans 2011-06-14 22:47:26

+1

我不完全确定这是否有帮助,我不是一个包含链接的答案的粉丝:) – BalusC 2011-06-14 22:52:21

2

下面是提供Struts2的标准方法,用一个例子:

http://struts.apache.org/2.0.14/docs/file-upload.html

这是很简单和优雅(无需混淆servletRequest.getRealPath("/")作为其他示例链接hoss)。

通过使用<s:file>标记(以及合适的拦截器),Struts2将完成所有脏操作并为您提供(临时)上传文件,作为操作中的File字段;你可以打开它或移动,或者其他任何文件。