首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 软件管理 > 软件架构设计 >

Spring资料上传下载and图片上传及前台显示

2013-08-01 
Spring文件上传下载and图片上传及前台显示之前感觉图片上传下载不就是通过流的形式么,最近做起来还真是棘

Spring文件上传下载and图片上传及前台显示

之前感觉图片上传下载不就是通过流的形式么,最近做起来还真是棘手啊,所以说有的是就得先做后想才对。

  大体思路:把把图片存到文件夹中,然后把图片的名字存入数据库中。因公司用的Spring框架,所以只用Spring框架完成了上传,之后改变了方法完成的上传及前台显示,还是把网上找的Spring的上传下载贴出来,估计以后用得上,下载没有亲测~~

  Spring上传:

  springmvc.xml必须配置:1.

?

<bean id="multipartResolver"p:defaultEncoding="utf-8"/>

?

2.WEB-INF/lib下必加入:commons-fileupload.jar与commons-io-1.4.jar二个包

3.提交的form表单中属性加:enctype="multipart/form-data"

  单文件上传(以下为三种方法,第二种亲测):

@Controllerpublic class FileUploadController {    @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();        System.out.println("获得文件名:" + realFileName);        // 获取路径        String ctxPath = request.getSession().getServletContext().getRealPath(                "/")                + "images/";        // 创建文件        File dirPath = new File(ctxPath);        if (!dirPath.exists()) {            dirPath.mkdir();        }        File uploadFile = new File(ctxPath + realFileName);        FileCopyUtils.copy(file.getBytes(), uploadFile);        request.setAttribute("files", loadFiles(request));        return new ModelAndView("success");    }    @RequestMapping(value = "/upload2", method = RequestMethod.POST)    public ModelAndView onSubmit2(HttpServletRequest request,            HttpServletResponse response, BindException errors)            throws Exception {        // 转型为MultipartHttpRequest        MultipartHttpServletRequest multipartRequest = (MultipartHttpServletRequest) request;        // 根据前台的name名称得到上传的文件        MultipartFile file = multipartRequest.getFile("file");        // 获得文件名:        String realFileName = file.getOriginalFilename();        // 获取路径        String ctxPath = request.getSession().getServletContext().getRealPath(                "/")                + "\" + "images\";        // 创建文件        File dirPath = new File(ctxPath);        if (!dirPath.exists()) {            dirPath.mkdir();        }        File uploadFile = new File(ctxPath + realFileName);        FileCopyUtils.copy(file.getBytes(), uploadFile);        request.setAttribute("files", loadFiles(request));        return new ModelAndView("success");    }    @RequestMapping(value = "/upload3", method = RequestMethod.POST)    public String upload(@RequestParam("file")    MultipartFile image, HttpServletRequest request) throws IOException {        String ctxPath = request.getSession().getServletContext().getRealPath(                "/")                + "\" + "images\";        System.out.println("路径:" + ctxPath);        File file = new File(ctxPath + "/" + image.getOriginalFilename());        // FileCopyUtils.copy(image.getBytes(),new        // File(ctxPath+"/"+image.getOriginalFilename()));        try {            image.transferTo(file); // 保存上传的文件        } catch (IllegalStateException e) {            e.printStackTrace();        } catch (IOException e) {            e.printStackTrace();        }        request.setAttribute("files", loadFiles(request));        return "success";    }


多文件上传(没有亲自测试,不过同时参考以下代码写的):

?

// 多文件上传    @RequestMapping(value = "/upload4", method = RequestMethod.POST)    public ModelAndView fileUpload(HttpServletRequest request,            HttpServletResponse response, BindException errors)            throws Exception {        MultipartHttpServletRequest multipartRequest = (MultipartHttpServletRequest) request;        Map<String, MultipartFile> fileMap = multipartRequest.getFileMap();        String ctxPath = request.getSession().getServletContext().getRealPath(                "/")                + "\" + "images\";        File file = new File(ctxPath);        if (!file.exists()) {            file.mkdir();        }        String fileName = null;        for (Map.Entry<String, MultipartFile> entity : fileMap.entrySet()) {            // 上传文件名            // System.out.println("key: " + entity.getKey());            MultipartFile mf = entity.getValue();            fileName = mf.getOriginalFilename();            File uploadFile = new File(ctxPath + fileName);            FileCopyUtils.copy(mf.getBytes(), uploadFile);        }        request.setAttribute("files", loadFiles(request));        return new ModelAndView("success");    }    // @ModelAttribute("files")//此属性用于初始类时调用,但上传文件后不能时时反应上传文件个数,不适合动态数据    public List<String> loadFiles(HttpServletRequest request) {        List<String> files = new ArrayList<String>();        String ctxPath = request.getSession().getServletContext().getRealPath(                "/")                + "\" + "images\";        File file = new File(ctxPath);        if (file.exists()) {            File[] fs = file.listFiles();            String fname = null;            for (File f : fs) {                fname = f.getName();                if (f.isFile()) {                    files.add(fname);                }            }        }        return files;    }


文件下载:

?

@RequestMapping("/download/{fileName}")    public ModelAndView download(@PathVariable("fileName")    String fileName, HttpServletRequest request, HttpServletResponse response)            throws Exception {        response.setContentType("text/html;charset=utf-8");        request.setCharacterEncoding("UTF-8");        java.io.BufferedInputStream bis = null;        java.io.BufferedOutputStream bos = null;        String ctxPath = request.getSession().getServletContext().getRealPath(                "/")                + "\" + "images\";        String downLoadPath = ctxPath + fileName;        System.out.println(downLoadPath);        try {            long fileLength = new File(downLoadPath).length();            response.setContentType("application/x-msdownload;");            response.setHeader("Content-disposition", "attachment; filename="                    + new String(fileName.getBytes("utf-8"), "ISO8859-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;    }}


spring.xml(必须配置)

<?xml version="1.0" encoding="UTF-8" ?><beans xmlns="http://www.springframework.org/schema/beans"    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"    xmlns:p="http://www.springframework.org/schema/p"    xmlns:context="http://www.springframework.org/schema/context"        xsi:schemaLocation="        http://www.springframework.org/schema/beans         http://www.springframework.org/schema/beans/spring-beans-3.0.xsd        http://www.springframework.org/schema/context         http://www.springframework.org/schema/context/spring-context-3.0.xsd">    <!--         自动搜索@Controller标注的类        用于指明系统从哪个路径下寻找controller,然后提前初始化这些对象。    -->    <context:component-scan base-package="net.liuzd.web" />    <!--  ③:对模型视图名称的解析,即在模型视图名称添加前后缀 -->    <bean        p:suffix=".jsp" />       <bean id="multipartResolver"        p:defaultEncoding="utf-8">        <property name="maxUploadSize">            <value>104857600</value>        </property>        <property name="maxInMemorySize">            <value>4096</value>        </property>    </bean></beans>


success.jsp

?

<%@ taglib  prefix="c" uri="/WEB-INF/c.tld"%><h1>Upload Successful</h1>    <c:forEach var="month" items="${files}">        <li><a href="${pageContext.request.contextPath}/download/${month}.do">${month}</a></li>    </c:forEach>  <hr><br>  <a href="${pageContext.request.contextPath}/index.jsp">返回</a>


web.xml(必须配置)

?

<?xml version="1.0" encoding="UTF-8"?><web-app version="2.4" xmlns="http://java.sun.com/xml/ns/j2ee"    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"    xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee     http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">        <context-param>        <param-name>log4jConfigLocation</param-name>        <param-value>/WEB-INF/classes/log4j.properties</param-value>    </context-param>    <context-param>        <param-name>log4jRefreshInterval</param-name>        <param-value>60000</param-value>    </context-param>    <context-param>        <param-name>log4jExposeWebAppRoot</param-name>        <param-value>false</param-value>    </context-param>    <listener>        <listener-class>            org.springframework.web.util.Log4jConfigListener        </listener-class>    </listener>    <filter>        <filter-name>encodingFilter</filter-name>        <filter-class>            org.springframework.web.filter.CharacterEncodingFilter        </filter-class>        <init-param>            <param-name>encoding</param-name>            <param-value>UTF-8</param-value>        </init-param>        <init-param>            <param-name>forceEncoding</param-name>            <param-value>false</param-value>        </init-param>    </filter>    <filter-mapping>        <filter-name>encodingFilter</filter-name>        <url-pattern>*.do</url-pattern>    </filter-mapping>    <filter-mapping>        <filter-name>encodingFilter</filter-name>        <url-pattern>*.jsp</url-pattern>    </filter-mapping>    <servlet>        <servlet-name>springmvc</servlet-name>        <servlet-class>            org.springframework.web.servlet.DispatcherServlet        </servlet-class>        <init-param>            <param-name>contextConfigLocation</param-name>            <param-value>classpath:springmvc.xml</param-value>        </init-param>        <load-on-startup>1</load-on-startup>    </servlet>    <servlet-mapping>        <servlet-name>springmvc</servlet-name>        <url-pattern>*.do</url-pattern>    </servlet-mapping>    <welcome-file-list>        <welcome-file>index.jsp</welcome-file>    </welcome-file-list></web-app>


以上有些没有亲自测试,以下为自己写的图片上传及前台显示

?

/**上传图片     * @param request  内置对象     * @param response  内置对象     * @param user  用户类     * @param throws Exception  抛出异常     * @return       *      */    public void upload(HttpServletRequest request, HttpServletResponse response,@RequestParam(value = "file1", required = false) MultipartFile file , @ModelAttribute("book") com.tayh.projectCenter.vo.Book book){        //获取上传文件        if("".equals(file)||null==file){            //上传图片为空或null,不进行操作                    }else{            //上传图片处理            String file_path=request.getRealPath("/")+"upload";            String file_real_file = "upload" + File.separator + "book" + File.separator;            StringBuffer listFiles = new StringBuffer();            StringBuffer listFileNames = new StringBuffer();                if(!file.isEmpty()){                    String fileName = file.getOriginalFilename();                    System.out.println(fileName);                    File files = new File(file_path, fileName);                    if(!files.exists()){                        files.mkdirs();                    }                    if(!fileName.equals(null) && !"".equals(fileName)){                        try {                            file.transferTo(files);                        } catch (Exception e) {                            e.printStackTrace();                        }                    }                        listFiles.append(file_real_file + fileName + ",");                    listFileNames.append(fileName);            }            String f=listFileNames.toString();            book.setBookPic(f);          }   }        /**将图片读到页面上     * @param request  内置对象     * @param response  内置对象     * @param throws Exception  抛出异常     * @return       *      */    public void dumpImage(HttpServletRequest request, HttpServletResponse response){         String paramPath = request.getParameter("path");         String path ="";        if(paramPath == null){         path = (String) request.getAttribute("path");         }else{         try {            path = new String(paramPath.getBytes("ISO8859-1"), "UTF-8");        } catch (UnsupportedEncodingException e) {            // TODO Auto-generated catch block            e.printStackTrace();        }         }         String picPath = request.getRealPath("/")+"upload"+ File.separator+path;        InputStream in = null;         BufferedInputStream bis = null;         OutputStream out = null;         BufferedOutputStream bos = null;         // 判断文件是否存在         File file = new File(picPath);         if (!file.exists() || file.isDirectory()){         return;         }         try {         in = new FileInputStream(picPath);         bis = new BufferedInputStream(in);         byte[] data = new byte[1024];         int bytes = 0;         out = response.getOutputStream();         bos = new BufferedOutputStream(out);         while ((bytes = bis.read(data, 0, data.length)) != -1) {         bos.write(data, 0, bytes);         }         bos.flush();         } catch (Exception e) {         e.printStackTrace();         } finally {         try {         if (bos != null)         bos.close();         if (out != null)         out.close();         if (bis != null)         bis.close();         if (in != null)         in.close();         } catch (IOException e) {         e.printStackTrace();         }       }     }


前台页面bookAdd.jsp

?

<TR height="20px">     <td align="center">图片上传</td>     <td><input type="file" name="file1" id="file1" /></td></TR>


前台接收borrowBook.jsp

?

<td>         <img id="bookImage" src="dumpImage.do?path=${list.bookPic }" style="height:120px;width:100px;" /></td>

文章来源:点击打开链接

热点排行