从零实现MVC框架之文件上传(8)

来源:互联网 发布:linux服务器视频教程 编辑:程序博客网 时间:2024/05/30 23:18

这里使用commons-io-2.4.jar和commons-fileupload-1.3.1.jar实现文件上传,所以事先要把这两个包加入到项目中。

文件解析类

package com.hc.web.io;import java.util.Iterator;import java.util.List;import javax.servlet.http.HttpServletRequest;import org.apache.commons.fileupload.FileItem;import org.apache.commons.fileupload.disk.DiskFileItemFactory;import org.apache.commons.fileupload.servlet.ServletFileUpload;import org.apache.commons.fileupload.servlet.ServletRequestContext;public class UploadFileParse {public static MutipartFile parseRequest(HttpServletRequest request) throws Exception {MutipartFile mf = new MutipartFile();DiskFileItemFactory factory = new DiskFileItemFactory();ServletFileUpload sfu = new ServletFileUpload(factory);List<FileItem> items = sfu.parseRequest(new ServletRequestContext(request));Iterator<FileItem> iter = items == null ? null : items.iterator();while (iter != null && iter.hasNext()) {FileItem item = (FileItem) iter.next();if (item.isFormField()) {String field = item.getFieldName().trim();String value = item.getString("UTF-8").trim();mf.put(field, value);} else if (!item.isFormField()) {mf.setFileName(item.getName());mf.setInputStream(item.getInputStream());}}return mf;}}

文件信息类

package com.hc.web.io;import java.io.File;import java.io.FileOutputStream;import java.io.IOException;import java.io.InputStream;import java.util.HashMap;import java.util.Map;public class MutipartFile {private Map<String,String> params = new HashMap<>();private InputStream inputStream;private String fileName;public void put(String key,String value){params.put(key, value);}public void setInputStream(InputStream inputStream) {this.inputStream = inputStream;}public Map<String,String> getParams(){return params;}public String getString(String key){return params.get(key)==null?null:params.get(key);}public String getFileName() {return fileName;}public void setFileName(String fileName) {this.fileName = fileName;}public void copyToFile(File file) throws IOException{FileOutputStream fos = new FileOutputStream(file);byte [] buffer = new byte[1024];int len = -1;while((len = inputStream.read(buffer)) != -1){fos.write(buffer, 0, len);}fos.flush();fos.close();}}


修改AbstractHcAction类

//调用controller方法Method method = controllerClassInfo.getMethodMap().get(methodParam);Object invoke = null;if(ServletFileUpload.isMultipartContent(request)){MutipartFile mf = UploadFileParse.parseRequest(request);invoke = method.invoke(newInstance, request,response,mf);}else{invoke = method.invoke(newInstance, request,response);}if(invoke != null && invoke instanceof View){View view = (View)invoke;request.getRequestDispatcher(view.getPath()).forward(request, response);}

 

修改UserController类

@MethodMapping(method="upload")public View uploadFile(HttpServletRequest request, HttpServletResponse response,MutipartFile file) throws Exception{String parameter = file.getString("file_name");File targetFile = new File("c:/aaa.txt");file.copyToFile(targetFile);return new View("user.jsp");}


 

测试

需要一个jsp页面,页面上使用form表单上传一个txt文件,这里这个jsp页面的代码就不列出来了。form的action路径是
/上下文/user.hc?method=upload。
启动tomcat,浏览器输入上传jsp的地址,然后选择一个txt的文件,点击提交按钮。然后查看c盘下是不是多了一个aaa.txt
的文件。

 



 

0 0
原创粉丝点击