首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 其他教程 > 开源软件 >

Spring3.1 资料上传

2012-06-29 
Spring3.1 文件上传注意:以下上传和下载方法未必完全正确,不同浏览器效果不同,建议不要使用IE/**? * 简单

Spring3.1 文件上传

注意:以下上传和下载方法未必完全正确,不同浏览器效果不同,建议不要使用IE

/**
? * 简单的文件上传
? * @author:qiuchen
? * @createTime:2012-6-19
? * @param request
? * @param response
? * @param errors
? * @return
? * @throws Exception
? */
?@RequestMapping(value = "/upload", method = RequestMethod.POST)
?public ModelAndView onSubmit(HttpServletRequest request,HttpServletResponse response, BindException errors) throws Exception {
??//上传文件处理器
??MultipartHttpServletRequest multipartRequest = (MultipartHttpServletRequest) request;
??//文件对象
??CommonsMultipartFile file = (CommonsMultipartFile) multipartRequest.getFile("file");
??
??//从表单域中获取文件对象的详细,如:文件名称等等
??String name = multipartRequest.getParameter("name");
??System.out.println("name: " + name);
??
??// 获得文件名(全路径)
??String realFileName = file.getOriginalFilename();
??realFileName = encodeFilename(realFileName,request);
??System.out.println("获得文件名:" + realFileName);

??// 获取当前web服务器项目路径
??String ctxPath = request.getSession().getServletContext().getRealPath("/")+ "fileupload/";
??
??// 创建文件夹
??File dirPath = new File(ctxPath);
??if (!dirPath.exists()) {
???dirPath.mkdir();
??}
??//创建文件
??File uploadFile = new File(ctxPath + realFileName);
??
??//Copy文件
??FileCopyUtils.copy(file.getBytes(), uploadFile);
??
???return new ModelAndView("success");
?}

?

/**
? * 批量上传文件
? * @author:qiuchen
? * @createTime:2012-6-19
? * @param request
? * @param response
? * @param errors
? * @return
? * @throws Exception
? */
?@RequestMapping(value = "/upload2", method = RequestMethod.POST)
?public ModelAndView onSubmit2(HttpServletRequest request,HttpServletResponse response, BindException errors) throws Exception {
??//文件处理器
??MultipartHttpServletRequest multipartRequest = (MultipartHttpServletRequest) request;
??//文件列表
??Map<String, MultipartFile> fileMap = multipartRequest.getFileMap();
??//获取服务器上传文件夹地址
??String ctxPath = request.getSession().getServletContext().getRealPath("/")+ "\" + "fileupload\";
??//创建文件夹
??File file = new File(ctxPath);
??if (!file.exists()) {
???file.mkdir();
??}
??
??String fileName = null;
??for (Map.Entry<String, MultipartFile> entity : fileMap.entrySet()) {
???//单个文件
???MultipartFile mf = entity.getValue();
???//文件名
???fileName = mf.getOriginalFilename();
???//创建文件
???File uploadFile = new File(ctxPath + fileName);
???//copy从内存中复制到磁盘上
???FileCopyUtils.copy(mf.getBytes(), uploadFile);
??}
????return new ModelAndView("success");
?}

?

/**?
???? * 设置下载文件中文件的名称
???? * @param filename?
???? * @param request?
???? * @return?
???? */???
?public static String encodeFilename(String filename,HttpServletRequest request) {
??/**
?? * 获取客户端浏览器和操作系统信息 在IE浏览器中得到的是:User-Agent=Mozilla/4.0 (compatible; MSIE
?? * 6.0; Windows NT 5.1; SV1; Maxthon; Alexa Toolbar)
?? * 在Firefox中得到的是:User-Agent=Mozilla/5.0 (Windows; U; Windows NT 5.1;
?? * zh-CN; rv:1.7.10) Gecko/20050717 Firefox/1.0.6
?? */
??String agent = request.getHeader("USER-AGENT");
??try {
???if ((agent != null) && (-1 != agent.indexOf("MSIE"))) { // IE浏览器
????String newFileName = URLEncoder.encode(filename, "UTF-8");
????newFileName = StringUtils.replace(newFileName, "+", "%20");
????if (newFileName.length() > 150) {
?????newFileName = new String(filename.getBytes("GB2312"),
???????"ISO8859-1");
?????newFileName = StringUtils.replace(newFileName, " ", "%20");
????}
????return newFileName;
???}
???if ((agent != null) && (-1 != agent.indexOf("Mozilla"))) // 火狐浏览器
????return MimeUtility.encodeText(filename, "UTF-8", "B");
???return filename;
??} catch (Exception ex) {
???return filename;
??}
?}

?

/**
? * 文件下载
? * @author:qiuchen
? * @createTime:2012-6-19
? * @param fileName
? * @param request
? * @param response
? * @return
? * @throws Exception
? */
?@RequestMapping("/download/{fileName}")
?public ModelAndView download(@PathVariable("fileName") String fileName,HttpServletRequest request, HttpServletResponse response)throws Exception {
??request.setCharacterEncoding("UTF-8");
??
??BufferedInputStream bis = null;? //从文件中读取内容
??BufferedOutputStream bos = null;?//向文件中写入内容
??
??//获得服务器上存放下载资源的地址
??String ctxPath = request.getSession().getServletContext().getRealPath("/")+ "\" + "fileupload\";
??//获得下载文件全路径
??String downLoadPath = ctxPath + fileName;
??System.out.println(downLoadPath);
??//如果文件不存在,退出
??File file = new File(downLoadPath);
??if(!file.exists()){
???return null;
??}
??try {
???//获得文件大小
???long fileLength = new File(downLoadPath).length();
???System.out.println(new String(fileName.getBytes("utf-8"), "ISO-8859-1"));
???response.setContentType("text/html;charset=utf-8"); //设置相应类型和编码
???response.setHeader("Content-disposition", "attachment;filename=" + new String(fileName.getBytes("utf-8"), "ISO-8859-1"));
???response.setHeader("Content-Length", String.valueOf(fileLength));
???
???bis = new BufferedInputStream(new FileInputStream(downLoadPath));
???bos = new BufferedOutputStream(response.getOutputStream());
???//定义文件读取缓冲区
???byte[] buff = new byte[2048];
???int bytesRead;
???//把下载资源写入到输出流
???while (-1 != (bytesRead = bis.read(buff, 0, buff.length))) {
????bos.write(buff, 0, bytesRead);
???}
??} catch (Exception e) {
???e.printStackTrace();
??} finally {
???if (bis != null)
????bis.close();
???if (bos != null)
????bos.close();
??}
??return null;
?}

?

对于正在复制代码的你,Control+O导入命名包时,以下应该是你喜欢的:

import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.net.BindException;
import java.net.URLEncoder;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.commons.lang.StringUtils;
import org.springframework.stereotype.Controller;
import org.springframework.util.FileCopyUtils;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.multipart.MultipartFile;
import org.springframework.web.multipart.MultipartHttpServletRequest;
import org.springframework.web.multipart.commons.CommonsMultipartFile;
import org.springframework.web.servlet.ModelAndView;
import com.sun.xml.internal.messaging.saaj.packaging.mime.internet.MimeUtility;

热点排行