使用hibernate+srpingmvc实现文件(图片)上传和下载
2017-10-25 19:23
561 查看
需求:
文件上传,可以选择文件,上传者的名字。保存到数据库中
上传成功显示列表,上传的所有记录,显示上传者的名字,上传时间,附带连接,点击下载此文件。
配置:使用hibernate,所以要有hibernate.cfg.xml和生成表的xx.hbm.xml文件.
hibernate.cfg.xml配置:
xx.hbm.xml文件配置:
因为要使用springmvc,所以要有 springmvc的xml配置文件,因为上传的是文件,所以有 < bean id=”multipartResolver”>
pom.xml:
Controller类:
dao层:
上传的jsp:
显示所有数据的jsp, 这个jsp是放在webcontent/web-inf/views目录下的,
总结:敲代码的过程中遇到了两个问题,1. 图片不能在浏览器进行显示 2.图片能显示之后不能下载(因为路径不对)
图片不能在浏览器进行显示:要在三个地方设置虚拟路径,
1.在Servers项目的server.xml的host的标签中加:< Context docBase=”D:\picture” path=”/lm/” debug=”0” reloadable=”true” />
2.在tomcat的安装目录下面,D:\software\tomcat\apache-tomcat-8.5.16\backup下面的server.xml做与上面同样的操作.
3.在D:\software\tomcat\apache-tomcat-8.5.16\conf下面的server.xml做与上面同样的操作.
这样直接获取虚拟路径在浏览器页面进行显示了,但是因为数据库存的是文件的虚拟路径,这样是下载不了文件的,所以将文件的名字和固定的存放上传文件的路径进行拼接,这样就获取到真实的文件路径了.
File file = new File(“D:\picture\”+string); new出来的是路径是由 \符号组成的,不是 /
文件上传,可以选择文件,上传者的名字。保存到数据库中
上传成功显示列表,上传的所有记录,显示上传者的名字,上传时间,附带连接,点击下载此文件。
配置:使用hibernate,所以要有hibernate.cfg.xml和生成表的xx.hbm.xml文件.
hibernate.cfg.xml配置:
<?xml version="1.0" encoding="UTF-8"?> <hibernate-configuration> <session-factory> <!-- 基本配置:数据库连接信息(4个)+1(方言)+(1)创建表策略 +(2)sql语句输出 --> <property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property> <property name="hibernate.connection.url">jdbc:mysql://localhost:3306/up_load</property> <property name="hibernate.connection.username">root</property> <property name="hibernate.connection.password">123</property> <!-- 数据库方言 --> <property name="hibernate.dialect">org.hibernate.dialect.MySQL5InnoDBDialect</property> <property name="hibernate.hbm2ddl.auto">update</property> <property name="hibernate.format_sql">true</property> <property name="hibernate.show_sql">true</property> <!-- getCurrentSession()调用必须有该配置 --> <property name="current_session_context_class">thread</property> <!-- 映射文件:目录 --> <mapping resource="com/lm/pojo/fold.hbm.xml" /> </session-factory> </hibernate-configuration>
xx.hbm.xml文件配置:
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd"> <hibernate-mapping package="com.lm.pojo"> <class name="Fold" table="fold"> <id name="id" > <generator class="native"></generator> </id> <property name="person"></property> <property name="time"></property> <property name="path" ></property> </class> </hibernate-mapping>
因为要使用springmvc,所以要有 springmvc的xml配置文件,因为上传的是文件,所以有 < bean id=”multipartResolver”>
<?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:mvc="http://www.springframework.org/schema/mvc" xmlns:context="http://www.springframework.org/schema/context" xsi:schemaLocation="http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-4.1.xsd http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.1.xsd"> <!-- 扫描 --> <context:component-scan base-package="com.lm.controller" /> <!-- 配置映射解析器 --> <bean id="internalResourceViewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver"> <!-- jsp文件存放在web-inf下,目的是为了强制用户必须先经过控制器,然后转发的jsp 因为在web-inf下的资源只能通过转发的方式访问到资源 --> <property name="prefix" value="/WEB-INF/views/" /> <property name="suffix" value=".jsp" /> </bean> <!-- 添加对文件上传功能的需求 --> <bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver"> <property name="defaultEncoding" value="UTF-8"></property> <property name="maxUploadSize" value="1024000"></property> </bean> </beans>
pom.xml:
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>com.lm</groupId> <artifactId>test13</artifactId> <version>0.0.1-SNAPSHOT</version> <dependencies> <!-- https://mvnrepository.com/artifact/org.springframework/spring-webmvc --> <dependency> <groupId>javax.servlet</groupId> <artifactId>jstl</artifactId> <version>1.2</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-webmvc</artifactId> <version>4.3.10.RELEASE</version> </dependency> <!-- https://mvnrepository.com/artifact/javax/javaee-api --> <dependency> <groupId>javax</groupId> <artifactId>javaee-api</artifactId> <version>7.0</version> <scope>provided</scope> </dependency> <dependency> <groupId>commons-fileupload</groupId> <artifactId>commons-fileupload</artifactId> <version>1.3.1</version> </dependency> <!-- 数据库 --> <dependency> <groupId>org.hibernate</groupId> <artifactId>hibernate-core</artifactId> <version>5.1.0.Final</version> </dependency> <!-- https://mvnrepository.com/artifact/mysql/mysql-connector-java --> <!-- mysql的connector包 --> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>5.1.24</version> </dependency> </dependencies> </project>
Controller类:
package com.lm.controller; import java.io.File; import java.io.IOException; import java.net.URLEncoder; import java.util.List; import java.util.UUID; import org.apache.commons.io.FileUtils; import org.springframework.core.serializer.support.SerializingConverter; import org.springframework.http.HttpHeaders; import org.springframework.http.HttpStatus; import org.springframework.http.MediaType; import org.springframework.http.ResponseEntity; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.context.WebApplicationContext; import org.springframework.web.context.support.WebApplicationContextUtils; import org.springframework.web.multipart.MultipartFile; import org.springframework.web.servlet.ModelAndVi e5cb ew; import com.lm.dao.FileAddDao; import com.lm.pojo.Fold; @Controller public class UpController { @RequestMapping("/up") public ModelAndView up(@RequestParam("file") MultipartFile multipartFile,String person) throws IllegalStateException, IOException { //文件的名字 //String fileName = multipartFile.getOriginalFilename(); UUID name1 = UUID.randomUUID(); String fileName = name1.toString()+".jpg"; System.out.println(fileName+"--"+person); File file = new File("D:\\picture\\"+fileName); //String path1 = file.getPath(); //文件存在本地磁盘 multipartFile.transferTo(file); Fold fold = new Fold(); fold.setPerson(person); fold.setPath("/lm/"+fileName); FileAddDao fileAddDao = new FileAddDao(); fileAddDao.addDao(fold); FileAddDao fileAddDao1 = new FileAddDao(); List<Fold> list = fileAddDao1.findAll(); ModelAndView modelAndView = new ModelAndView("list"); modelAndView.addObject("list",list); return modelAndView; } @RequestMapping("/load") public ResponseEntity<byte[]> load(String path) throws IOException { System.out.println("这是path---"+path); //组装返回数据 //path.lastIndexOf("/") 找/ 最后一次出现的位置 // path.substring(path.lastIndexOf("/")); 从/最后一次出现的位置 开始截取 String string = path.substring(path.lastIndexOf("/")); File file = new File("D:\\picture\\"+string); System.out.println(file.getPath()); byte[] files = FileUtils.readFileToByteArray(file); //组装头部 HttpHeaders headers = new HttpHeaders(); headers.setContentType(MediaType.APPLICATION_OCTET_STREAM); headers.setContentDispositionFormData("attachment", URLEncoder.encode(file.getName(),"UTF-8")); return new ResponseEntity<byte[]>(files,headers,HttpStatus.OK); } }
dao层:
package com.lm.dao; import java.util.List; import org.hibernate.Query; import org.hibernate.Session; import org.hibernate.Transaction; import com.lm.pojo.Fold; import com.lm.utils.HibernateUtils; public class FileAddDao { public void addDao(Fold fold) { Session session = HibernateUtils.getCurrentSession(); Transaction transaction = session.beginTransaction(); try { session.save(fold); transaction.commit(); }catch(Exception e) { System.out.println("事务回滚了"); transaction.rollback(); } } public List<Fold> findAll() { Session session = HibernateUtils.getCurrentSession(); Transaction transaction = session.beginTransaction(); List<Fold> list = session.createQuery("from Fold").list(); System.out.println("发的顺丰到付"+list); return list; } /*public Fold findById(int id) { Session session = HibernateUtils.getCurrentSession(); Transaction transaction = session.beginTransaction(); Fold fold = new Fold(); Query query = session.createQuery("from Fold where id = :id"); fold = (Fold) query.setParameter("id", id).uniqueResult(); System.out.println("这是fold "+fold); return fold; } */ }
上传的jsp:
显示所有数据的jsp, 这个jsp是放在webcontent/web-inf/views目录下的,
总结:敲代码的过程中遇到了两个问题,1. 图片不能在浏览器进行显示 2.图片能显示之后不能下载(因为路径不对)
图片不能在浏览器进行显示:要在三个地方设置虚拟路径,
1.在Servers项目的server.xml的host的标签中加:< Context docBase=”D:\picture” path=”/lm/” debug=”0” reloadable=”true” />
2.在tomcat的安装目录下面,D:\software\tomcat\apache-tomcat-8.5.16\backup下面的server.xml做与上面同样的操作.
3.在D:\software\tomcat\apache-tomcat-8.5.16\conf下面的server.xml做与上面同样的操作.
这样直接获取虚拟路径在浏览器页面进行显示了,但是因为数据库存的是文件的虚拟路径,这样是下载不了文件的,所以将文件的名字和固定的存放上传文件的路径进行拼接,这样就获取到真实的文件路径了.
File file = new File(“D:\picture\”+string); new出来的是路径是由 \符号组成的,不是 /
相关文章推荐
- 简单实现的自定义圆环进度条,可使用于文件的上传下载图片加载等地方.
- iOS开发-使用NSURLSession实现文件断点下载,文件离线续传以及图片上传
- 用MVC实现简单的文件(图片)上传下载功能
- 使用PhpMysql实现图片文件上传下载
- iOS开发-使用AFN实现GET/POST请求,以及文件下载/文件(图片)上传
- Openssh服务器的搭建,并使用PSFTP实现文件自动上传,下载的script命令
- Flex与.NET互操作(五):使用FileReference+HttpHandler实现文件上传/下载
- 使用SFTP实现Linux上文件上传下载
- ASP.NET2.0中全面实现文件图片上传下载处理
- JAVA 文件上传下载笔记之使用基本IO流实现上传
- 使用PuTTy实现本地文件上传下载
- JAVA中使用FTPClient实现文件上传下载
- Windows7中使用Task Scheduler调用WinScp批处理实现上传下载文件
- Flex与.NET互操作(五):使用FileReference+HttpHandler实现文件上传/下载
- Java中如何使用组件实现文件上传下载
- ASP.NET上传下载文件示例,使用webClient实现
- Flex与.NET互操作(五):使用FileReference+HttpHandler实现文件上传/下载
- Flex与.NET互操作(五):使用FileReference+HttpHandler实现文件上传/下载
- ASP.NET上传下载文件,使用TransmitFile方法实现下载。
- ASP.NET上传下载文件示例,使用webClient实现