Java多方式实现文件上传
JAVA大文件上传解决方案(500M以上)

JAVA大文件上传解决方案(500M以上)在Java中,处理大文件上传(500M以上)通常需要注意内存限制和网络传输速度。
以下是一种解决方案,可以帮助您处理这个问题。
2.调整服务器配置:为了支持大文件上传,需要对服务器进行一些配置调整。
例如,增加内存限制以处理大文件的内存需求、将超时时间增加以适应长时间的上传等。
3.分块上传:将大文件分块上传是一种常见的解决方案。
客户端将文件分成多个较小的块,并分批上传到服务器。
在服务器端,通过将这些小块合并成完整的文件来重建原始文件。
4. 上传进度显示:由于大文件可能需要较长时间上传,为了提供更好的用户体验,可以实时显示上传进度。
可以通过监测上传字节数或块数来计算上传进度,并通过AJAX或WebSockets将其在前端显示给用户。
5.断点续传:如果上传过程中发生中断,可以使用断点续传功能让用户从中断点恢复上传。
这可以通过保存已上传的字节或块数并在继续上传时进行验证来实现。
6. 压缩文件:如果可能,可以在客户端将大文件压缩成zip或其他压缩格式。
这将减少文件的大小和上传所需的时间。
7.使用CDN:考虑使用内容分发网络(CDN)来加速文件上传。
CDN可以将文件存储在全球各个服务器上,并将其传输到用户最近的服务器,从而提高上传速度。
8. 文件存储策略:对于大文件,可以将其存储在专门的分布式文件系统中,如Hadoop HDFS或GlusterFS。
这些系统能够处理大型文件的存储和访问,并提供高可用性和容错能力。
9.流式处理:在处理上传文件时,尽量使用流式处理而不是将整个文件加载到内存中。
将输入流与输出流连接,以流式方式传输文件数据,可以最大限度地减少内存消耗。
总结:处理大文件上传的关键是避免将整个文件加载到内存中,并优化上传速度和用户体验。
使用适当的库、合理的服务器配置、分块上传、上传进度显示、断点续传、压缩文件、CDN等策略可以有效解决这个问题。
此外,合理选择文件存储策略和使用流式处理也是很重要的。
Java利用MultipartFile实现上传多份文件的代码

Java利⽤MultipartFile实现上传多份⽂件的代码配置⽂件<!-- ⽂件上传 --><bean id="multipartResolver" class="monsMultipartResolver"><property name="defaultEncoding" value="utf-8"></property><property name="maxUploadSize" value="10485760000"></property><property name="maxInMemorySize" value="40960"></property></bean>form表单<form action="xxx.do" method="post" multiple="multiple""><input type="file" id="file" name="filename" multiple="multiple" value=""><input type="file" id="file" name="filename" multiple="multiple" value=""><input type="submit" value="上传"></form>java后台接受⽰例@RequestMapping("xxx")public String fileImgSave(@RequestParam("filename") MultipartFile[] files,HttpServletRequest request){//保存⽂件的路径String realPath = request.getSession().getServletContext().getRealPath("/imgssss");File path = new File(realPath);if(!path.exists()){path.mkdirs();}//判断file数组不能为空并且长度⼤于0if(files != null && files.length > 0){//循环获取file数组中得⽂件for(int i = 0;i < files.length;i++){MultipartFile file = files[i];//保存⽂件if (!file.isEmpty()){try {//转存⽂件 file.getOriginalFilename();⽂件原名称包括后缀名file.transferTo(new File(realPath+"/img"+i+".png"));} catch (IOException e) {e.printStackTrace();}}}}return "ok";}MultipartFile常⽤⽅法记录⽂件类型值 getContentType()⽂件原始名称包括后缀名 getOriginalFilename()表单中⽂件组件对应name值 getName()保存到⼀个⽬标⽂件中 transferTo()⽂件是否为空 isEmpty()⽂件⼤⼩单位为k getSize()总结以上所述是⼩编给⼤家介绍的Java利⽤MultipartFile实现上传多份⽂件的代码,希望对⼤家有所帮助,如果⼤家有任何疑问请给我留⾔,⼩编会及时回复⼤家的。
javamultipartfile[] 使用方法 -回复
![javamultipartfile[] 使用方法 -回复](https://img.taocdn.com/s3/m/20c20e2ca88271fe910ef12d2af90242a995ab5c.png)
javamultipartfile[] 使用方法-回复[Java MultipartFile[]使用方法]Java MultipartFile[]是Spring框架中用于处理多文件上传的类。
它提供了一种方便的方式来处理HTTP请求中的多个上传文件。
在本文中,将逐步回答有关Java MultipartFile[]的使用方法的问题。
第一步:了解MultipartFile类MultipartFile是Spring框架提供的一个接口,用于表示上传的文件。
它包含了许多有用的方法,可以帮助我们对文件进行操作,比如获取文件名、文件大小、输入流等。
但是,MultipartFile接口本身只能用于处理单个文件上传,并不能直接处理多个文件上传。
为了解决这个问题,Spring提供了一个MultipartFile[]数组,用于处理多个文件上传。
第二步:创建一个表单首先,我们需要在前端创建一个表单,用于接收用户的文件上传请求。
可以使用HTML的form标签,并设置enctype属性为"multipart/form-data",这样就可以处理文件上传了。
在表单中,创建一个input标签,并将其type属性设置为"file",这样用户就可以选择文件进行上传了。
在这里,我们可以使用多个input标签,以便用户可以选择并上传多个文件。
第三步:使用MultipartFile[]接收文件在后端的控制器中,我们需要定义一个方法来接收文件上传的请求。
首先,我们需要在方法的参数中添加一个MultipartFile[]数组,这样Spring将会将上传的文件自动注入到这个数组中。
例如:java@PostMapping("/upload")public String uploadFiles(@RequestParam("files") MultipartFile[] files) {处理文件上传逻辑}在这个例子中,我们使用了一个@RequestParam注解,将前端表单中的"files"参数映射到方法的files参数上。
java文档上传

1、背景:struts2+jsp上传:1、首先,在jsp中创建form,action,method="post" enctype="multipart/form-data"(method,与enctype必须写,这是上传文件必须的参数)。
2、设置<input type="file" name="xxxx">此处不使用formName.xxxx 的形式,因为不使用form提交来获取byte。
3、后台,action中private File xxxx,getter setter.如果有多个文件,使用File[]。
还需要再需要建立一个String xxxxFileName.getter,setter.4、对应的method中使用“对象”.setFile(this.xxxx)的形式来给对象赋值,然后service.save(对象)。
下载:1、<a href="downLoad.action">2、xml <action xxx></action>中间不需要写<result>3、public String downLoadLeaveFile() throws IOException { HttpServletRequest request = ServletActionContext.getRequest(); HttpServletResponse response =ServletActionContext.getResponse();String leaveId = request.getParameter("leaveId"); OutputStream out = response.getOutputStream();Leave leave = leaveManager.getLeave(Long.valueOf(leaveId));try {response.setContentType("application/ms-word");response.addHeader("Content-Disposition", "attachment;filename=" +URLEncoder.encode(leave.getUpFileFileName(),utf-8"));out.write(leave.getUpFile());} catch (IOException e) {e.printStackTrace();} return null;}写完了。
Java实现多文件上传功能

Java实现多⽂件上传功能⽂件上传是开发中⼗分常见的功能,在servlet3.0之前,实现⽂件上传需要使⽤⼀些插件技术,⽐如: commons-fileuploadsmartupload但是在3.0之后servlet内部集成⽂件上传的技术(multipart),有关servlet3.0⽂件上传的实现过程如下:1、表单的提交⽅式必须设置为post2、表单的enctype必须设置为multipart/form-data(使⽤⼆进制流的⽅式提交数据)3、在servlet类中加上@MultipartConfig注解包含四个可设置的参数分别为:fileSizeThreshold 内存缓存的最⼤空间(当上传⽂件的字节数达到该值后使⽤临时⽂件缓存)location 临时⽂件的存储⽬录maxFileSize 允许上传的单个⽂件的最⼤限制maxRequestSize 表单允许提交的总字节数页⾯端<!DOCTYPE html><html><head><meta charset="UTF-8"><title>Insert title here</title></head><body><form action="upload3" method="post" enctype="multipart/form-data"><input type="text" name="fname" placeholder="请输⼊⽂件名" /> <br /><input type="file" name="myfile" multiple/><button>上传</button></form></body></html>服务端package com.softeem.servlet;import java.io.File;import java.io.IOException;import java.util.Collection;import java.util.UUID;import javax.servlet.ServletException;import javax.servlet.annotation.MultipartConfig;import javax.servlet.annotation.WebServlet;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import javax.servlet.http.Part;@WebServlet({ "/UploadServlet", "/upload" })@MultipartConfig(//设置内存缓存的最⼤空间(当上传⽂件的字节数达到该值后使⽤临时⽂件缓存)fileSizeThreshold=1024*1024,//设置临时⽂件的存储⽬录location="d:/temp",//设置允许上传的单个⽂件的最⼤限制maxFileSize=1024*1024*200,//设置表单的最⼤允许提交的字节数maxRequestSize=1024*1024*500)public class UploadServlet extends HttpServlet {private static final long serialVersionUID = 1L;protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { String basePath = "d:/myfileserver";Collection<Part> parts = request.getParts();for(Part part:parts){if(part.getSize() > 0){String fname = part.getSubmittedFileName();//随机产⽣⼀个uuid作为⽂件名称String uuid = UUID.randomUUID().toString();//获取⽂件后缀String suffix = fname.substring(stIndexOf("."));//组合uuid和⽂件后缀成为新的⽂件名称fname = uuid+suffix;part.write(basePath+File.separator+fname);}}}protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // TODO Auto-generated method stubdoGet(request, response);}}以上就是本⽂的全部内容,希望对⼤家的学习有所帮助,也希望⼤家多多⽀持。
使用java的MultipartFile实现layui官网文件上传实现全部示例,java文件上传

使⽤java的MultipartFile实现layui官⽹⽂件上传实现全部⽰例,java⽂件上传layui(谐⾳:类UI) 是⼀款采⽤⾃⾝模块规范编写的前端 UI 框架,遵循原⽣ HTML/CSS/JS 的书写与组织形式,门槛极低,拿来即⽤。
layui⽂件上传⽰例地址:本次教程是基于springboot2.0的。
测试中把layui官⽹的⽂件上传都实现了⼀遍。
然后还在⾃⾏写了⼀个登录注册,使⽤了上传图像。
因为只是测试,所以写的不规范,谅解。
发⼀些项⽬截图,觉得对⾃⼰有⽤的朋友可以⾃⾏下载看看。
这个测试项⽬我发布在了GitHub上。
可以⾃⾏下载。
如果有什么问题的地⽅请⼤佬⼀定要留⾔告诉⼩弟我,感激不尽!地址:不下载继续看⽂章也是可以的。
往下滑.. .. ..废话少说,进⼊主题。
在pom⽂件导⼊commons-fileupload 1.3.3依赖或者jar包<!--上传⽂件依赖--><dependency><groupId>commons-fileupload</groupId><artifactId>commons-fileupload</artifactId><version>1.3.3</version></dependency>jar包下载地址1.导⼊完毕之后配置bean@Configurationpublic class SpringBean {//设置⽂件上传的配置@Bean(name = "multipartResolver")public CommonsMultipartResolver multipartResolver(){CommonsMultipartResolver resolver = new CommonsMultipartResolver();resolver.setDefaultEncoding("UTF-8");resolver.setMaxUploadSize(52428800);//设置上传⽂件的最⼤值resolver.setResolveLazily(true);return resolver;}2.在yml配置⽂件file:staticAccessPath: /upload/**uploadFolder: G://upload/3.然后配置⽂件夹映射,不然⽆法在项⽬中获取电脑上的⽂件不过这个好像和⽂件上传没有关系,哈哈哈。
java实现文件上传和下载
java实现⽂件上传和下载本⽂实例为⼤家分享了java实现⽂件上传和下载的具体代码,供⼤家参考,具体内容如下⽂件的上传upload:⽂件上传客户端通过表单的⽂件域file 把客户端的⽂件上传保存到服务器的硬盘上页⾯⾸先对上传的表单有以下要求:必须有⽂件域:input type=file表单提交⽅式:method=post表单的 enctype=multipart/form-data<form method="post" action="/user/regist" enctype="multipart/form-data"><table style="border: chartreuse;solid:2px"><tr><th>⽤户名</th><td><input type="text" name="username"></td></tr><tr><th>密码</th><td><input type="password" name="password"></td></tr><tr><th>⽤户头像</th><td><input type="file" name="photo"> </td></tr><tr><td colspan="2"><input type="submit" value="提交"></td></tr></table></form>Servlet1)⾸先要导⼊以下两个jar包,通过commons-fileupload实现⽂件上传2)创建⼀个⼯⼚对象DiskFileItemFactory,在创建⼀个多部件表单解析器ServletFileUpload,构造⽅法传⼊⼯⼚对象3)解析器解析请求对象,获得⼀个list集合,其中list集合存储的是⼀个⼀个的fileItem对象,⼀个fileItem对应⼀个组件,也就是⼀个<input>4) 遍历集合⽤isFormField()⽅法判断是否为普通组件,然后着重处理⽂件域组件5)获取⽂件名,并⽤getRealPath⽅法获取服务器上传⽂件所在路径,创建新⽂件夹6)获取输⼊流和创建输出流,进⾏⽂件的读写@WebServlet(value = "/user/regist")public class UploadServlet extends HttpServlet {protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {//创建⼀个⼯⼚对象DiskFileItemFactory factory = new DiskFileItemFactory();//创建⼀个多部件解析器对象ServletFileUpload fileUpload = new ServletFileUpload(factory);User user = new User();FileOutputStream out=null;try {//⽤解析器对象解析请求,返回⼀个FileItem类型的集合List<FileItem> list = fileUpload.parseRequest(req);for (FileItem fileItem : list) {/*** fileItem.getFieldName());:::获取组件的name值* fileItem.getName());::::获取⽂件域的⽂件名* fileItem.getSize());::::获取数据的字节个数* fileItem.getString());::::获取数据的字符串* fileItem.isFormField());:::判断是否为普通组件*///判断部件是否为普通组件if (fileItem.isFormField()) {//普通组件//获取组件名字也就是name的值String fieldName = fileItem.getFieldName();//获取组件的值也就是value的值String value = fileItem.getString("utf-8");if ("username".equals(fieldName)) { //设置实体类的属性user.setUsername(value);} else if ("password".equals(fieldName)) {user.setPassword(value);}} else {// ⽂件域//获取⽂件名String fielName = fileItem.getName();//输⼊流来读数据InputStream in = fileItem.getInputStream();//设置⽂件写出的路径,并⽤随机码来保证图⽚可以重复String path=req.getServletContext().getRealPath("/imgs/"+ UUID.randomUUID()+fielName);System.out.println("⽂件路径为:"+path);File file = new File(path);out = new FileOutputStream(file);//利⽤commons-io-1.4.jar的IOUtils的copy⽅法直接实现⽂件的复制IOUtils.copy(in,out);user.setPhoto(file.getName());}}} catch (Exception e) {e.printStackTrace();}finally {if(out!=null){out.close();}}req.getSession().setAttribute("user",user);req.getRequestDispatcher("/sucess.jsp").forward(req,resp);}}⽂件的下载页⾯只需⼀个超链接,传需要下载的⽂件名,或者直接输⼊路径在浏览器例: <a href="<c:url value='/file/download?fileName=14.jpg'/>" >狗狗1</a><br/>Servlet1)接收参数,获取⽂件名2)获取imgs的路径,也就是存储⽂件的⽂件夹的路径,然后创建⽂件,传⼊该路径和⽂件名3)创建输⼊流读取⽂件4)设置响应头,⾸先根据⽂件名字获取⽂件的⼤类型,设置响应头Content-Type指定响应的类型;设置响应头Content-Disposition,指定⽂件以附件形式保存到本地磁盘5)⽤响应获取输出流,读出⽂件到客户端@WebServlet("/user/download")public class DownloadServlet extends HttpServlet {protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {request.setCharacterEncoding("UTF-8");//获取要下载的⽂件名String fileName = request.getParameter("fileName");System.out.println(fileName);//获取服务器中存储图⽚的⽂件夹的路径String path1 = request.getServletContext().getRealPath("/imgs");String path=path1+"/"+fileName;File file = new File(path);//创建输⼊流读⽂件FileInputStream in = new FileInputStream(file);//通过⽂件名字获取⽂件的⼤类型String type = request.getServletContext().getMimeType(fileName);//设置响应头ContentType指定响应内容的类型response.setHeader("Content-type",type);//设置响应头Content-Disposition 指定以附件形式保存响应的信息response.setHeader("Content-Disposition","attachment;filename="+(URLEncoder.encode(fileName, "utf-8"))); ServletOutputStream out = response.getOutputStream();//实现⽂件的读写IOUtils.copy(in,out);if(in!=null){in.close();}}}以上就是本⽂的全部内容,希望对⼤家的学习有所帮助,也希望⼤家多多⽀持。
javaMultipartFile多文件上传通过文件夹解析所有文件
MultipartFile多文件:
javaMultipartFile多 文 件 上 传 通 过 文 件 夹 解 析 所 有 文 件
public Boolean upload(MultipartFile[] files) throws Exception { if (null != files && files.length > 0) { //用于判断文件个数 final int length = files.length; for (MultipartFile file : files) { final String originalFilename = file.getOriginalFilename(); assert originalFilename != null; //后缀,用于判断文件类型 String suffix = originalFilename.substring(stIndexOf(".") + 1);
FileInputStream fileInputStream = null; final String fileName = excel.getName(); //判断后缀是什么类型 String suffix = fileName.substring(stIndexOf(".") + 1); //创建文件输入流 fileInputStream = new FileInputStream(excel); //执行操作....
} return true; }
//获取输文件入流
final InputStream inputStream = file.getInputStream();
Java实现上传txt,doc,docx文件并且读取内容
Java实现上传txt,doc,docx⽂件并且读取内容1,前端上传/导⼊⽂件:var uploaderXls = new plupload.Uploader({//创建实例的构造⽅法runtimes: 'gears,html5,html4,silverlight,flash', //上传插件初始化选⽤那种⽅式的优先级顺序browse_button: 'btnImportXls', // 上传按钮url: "resumeController.do?importExcel", //远程上传地址flash_swf_url: 'plug-in/plupload/js/Moxie.swf', //flash⽂件地址silverlight_xap_url: 'plug-in/plupload/js/Moxie.xap', //silverlight⽂件地址filters: {max_file_size: '10mb', //最⼤上传⽂件⼤⼩(格式100b, 10kb, 10mb, 1gb)mime_types: [//允许⽂件上传类型{title: "files", extensions: "txt,doc,docx"}]},multipart_params:{isup:"1"},multi_selection: false, //true:ctrl多⽂件上传, false 单⽂件上传init: {FilesAdded: function(up, files) { //⽂件上传前debugger;uploaderXls.start();},FileUploaded: function(up, file, info) { //⽂件上传成功的时候触发info1 = JSON.parse(info.response);$("#resumeList").datagrid();layer.alert(info1.msg);//console.log(info.message);},Error: function(up,info, err) { //上传出错的时候触发layer.alert(err.message);}}});uploaderXls.init();2,后台接收⽂件,并读取:MultipartFile是spring的⼀个接⼝,通常我们可以在controller定义⽅法使⽤MultipartFile接收form表单提交的⽂件,然后将MultipartFile可以转化成⼀个⽂件。
java带参数批量上传文件的方法
一、简介在日常的工作和生活中,我们经常会遇到需要批量上传文件的情况,而Java作为一种广泛应用于企业级应用开发的编程语言,提供了一种方便快捷的方法来实现批量上传文件的操作。
本文将针对Java中带参数批量上传文件的方法进行介绍和讨论,希望能够为读者提供一些有用的参考和帮助。
二、利用java.io包实现带参数批量上传文件1. 在Java中,我们可以利用java.io包提供的File类和FileInputStream类来实现带参数批量上传文件的操作。
我们需要创建一个File对象来表示要上传的文件,然后利用FileInputStream类来读取文件内容,并将内容上传到目标目录中。
2. 代码示例:```javapublic class FileUpload {public static void main(String[] args) {String sourceDirectory = args[0]; // 源目录String targetDirectory = args[1]; // 目标目录File sourceDir = new File(sourceDirectory);File[] files = sourceDir.listFiles();for (File file : files) {try (FileInputStream fis = new FileInputStream(file)) {// 上传文件到目标目录// ...} catch (IOException e) {e.printStackTrace();}}}}```3. 在上面的代码示例中,我们首先通过命令行参数获取源目录和目标目录的路径,然后利用File类的listFiles()方法获取源目录中的所有文件,最后利用FileInputStream类读取文件内容并上传到目标目录中。
需要注意的是,在实际应用中,需要根据具体的需求对代码进行相应的修改和完善。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
在Struts 2中实现文件上传前一阵子有些朋友在电子邮件中问关于Struts 2实现文件上传的问题,所以今天我们就来讨论一下这个问题。
实现原理Struts 2是通过Commons FileUpload文件上传。
Commons FileUpload通过将HTTP的数据保存到临时文件夹,然后Struts使用fileUpload拦截器将文件绑定到Action的实例中。
从而我们就能够以本地文件方式的操作浏览器上传的文件。
具体实现前段时间Apache发布了Struts 2.0.6 GA,所以本文的实现是以该版本的Struts 作为框架的。
以下是例子所依赖类包的列表:清单1 依赖类包的列表首先,创建文件上传页面FileUpload.jsp,内容如下:<% @ page language = " java " contentType = " text/html; charset=utf-8 " pageEncodi ng = " utf-8 " %><% @ taglib prefix = " s " uri = " /struts-tags " %><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "/ TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="/1999/xhtml"><head><title> Struts 2 File Upload </title></head><body><s:form action="fileUpload"method="POST"enctype="multipart/form-data"> <s:file name="myFile"label="Image File"/><s:textfield name="caption"label="Caption"/><s:submit /></s:form></body></html>清单2 FileUpload.jsp在FileUpload.jsp中,先将表单的提交方式设为POST,然后将enctype设为multipart/form-data,这并没有什么特别之处。
接下来,<s:file/>标志将文件上传控件绑定到Action的myFile属性。
其次是FileUploadAction.java代码:package tutorial;import java.io.BufferedInputStream;import java.io.BufferedOutputStream;import java.io.File;import java.io.FileInputStream;import java.io.FileOutputStream;import java.io.InputStream;import java.io.OutputStream;import java.util.Date;import org.apache.struts2.ServletActionContext;import com.opensymphony.xwork2.ActionSupport;public class FileUploadAction extends ActionSupport {private static final long serialVersionUID = 572146812454l ;private static final int BUFFER_SIZE = 16 * 1024 ;private File myFile;private String contentType;private String fileName;private String imageFileName;private String caption;public void setMyFileContentType(String contentType) {this .contentType = contentType;}public void setMyFileFileName(String fileName) {this .fileName = fileName;}public void setMyFile(File myFile) {this .myFile = myFile;}public String getImageFileName() {return imageFileName;}public String getCaption() {return caption;}public void setCaption(String caption) {this .caption = caption;}private static void copy(File src, File dst) {try {InputStream in = null ;OutputStream out = null ;try {in = new BufferedInputStream( new FileInputStream(src), BUFFER_SIZ E);out = new BufferedOutputStream( new FileOutputStream(dst), BUFFER_ SIZE);byte [] buffer = new byte [BUFFER_SIZE];while (in.read(buffer) > 0 ) {out.write(buffer);}} finally {if ( null != in) {in.close();}if ( null != out) {out.close();}}} catch (Exception e) {e.printStackTrace();}}private static String getExtention(String fileName) {int pos = stIndexOf( " . " );return fileName.substring(pos);}@Overridepublic String execute() {imageFileName = new Date().getTime() + getExtention(fileName);File imageFile = new File(ServletActionContext.getServletContext().getReal Path( " /UploadImages " ) + " / " + imageFileName);copy(myFile, imageFile);return SUCCESS;}}清单3 tutorial/FileUploadAction.java在FileUploadAction中我分别写了setMyFileContentType、setMyFileFileName、setMyFile和setCaption四个Setter方法,后两者很容易明白,分别对应FileUpload.jsp中的<s:file/>和<s:textfield/>标志。
但是前两者并没有显式地与任何的页面标志绑定,那么它们的值又是从何而来的呢?其实,<s:file/>标志不仅仅是绑定到myFile,还有myFileContentType(上传文件的MIME类型)和myFileFileName(上传文件的文件名,该文件名不包括文件的路径)。
因此,<s:file name="xxx" />对应Action类里面的xxx、xxxContentType和xxxFileName三个属性。
FileUploadAction作用是将浏览器上传的文件拷贝到WEB应用程序的UploadImages文件夹下,新文件的名称是由系统时间与上传文件的后缀组成,该名称将被赋给imageFileName属性,以便上传成功的跳转页面使用。
下面我们就来看看上传成功的页面:<% @ page language = " java " contentType = " text/html; charset=utf-8 " pageEncodi ng = " utf-8 " %><% @ taglib prefix = " s " uri = " /struts-tags " %><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "/ TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="/1999/xhtml"><head><title> Struts 2 File Upload </title></head><body><div style="padding: 3px; border: solid 1px #cccccc; text-align: center"> <img src='UploadImages/<s:property value="imageFileName"/> ' /><br /><s:property value="caption"/></div></body></html>清单4 ShowUpload.jspShowUpload.jsp获得imageFileName,将其UploadImages组成URL,从而将上传的图像显示出来。