spring+mongodb 文件上传与下载实现
来源:互联网 发布:济南新风向网络 编辑:程序博客网 时间:2024/05/24 02:00
项目需要用的mongodb来存储文件
首先配置在spring配置文件中配置mongodb
1.需要的jar包(maven依赖)
<dependency> <groupId>org.springframework.data</groupId> <artifactId>spring-data-mongodb</artifactId> <version>1.7.0.RELEASE</version> </dependency>
2.spring 配置文件配置 applicationContext-mongodb.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:context="http://www.springframework.org/schema/context" xmlns:mongo="http://www.springframework.org/schema/data/mongo" xmlns:p="http://www.springframework.org/schema/p" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.0.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.0.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-4.0.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-4.0.xsd http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util-4.0.xsd http://www.springframework.org/schema/data/mongo http://www.springframework.org/schema/data/mongo/spring-mongo-1.0.xsd"> <!-- ignore-unresolvable 需要配成true 多xml读取配置文件时都需要加上 否则报错 --> <context:property-placeholder location="classpath:config/mongo.properties" ignore-unresolvable="true" /> <!-- mongo 配置start --> <!-- connections-per-host: 每个主机答应的连接数(每个主机的连接池大小),当连接池被用光时,会被阻塞住 max-wait-time: 被阻塞线程从连接池获取连接的最长等待时间(ms) connect-timeout:在建立(打开)套接字连接时的超时时间(ms) socket-timeout:套接字超时时间;该值会被传递给Socket.setSoTimeout(int) slave-ok:指明是否答应驱动从次要节点或者奴隶节点读取数据 --> <mongo:mongo id="mongo" replica-set="${mongo.replicaSet}"> <mongo:options connections-per-host="${mongo.connectionsPerHost}" threads-allowed-to-block-for-connection-multiplier="${mongo.threadsAllowedToBlockForConnectionMultiplier}" connect-timeout="${mongo.connectTimeout}" max-wait-time="${mongo.maxWaitTime}" auto-connect-retry="${mongo.autoConnectRetry}" socket-keep-alive="${mongo.socketKeepAlive}" socket-timeout="${mongo.socketTimeout}" slave-ok="${mongo.slaveOk}" write-number="${mongo.writeNumber}" write-timeout="${mongo.riteTimeout}" write-fsync="${mongo.writeFsync}"/> </mongo:mongo> <!-- 设置使用的数据库 名--> <mongo:db-factory id="mongoDbFactory" dbname="file" mongo-ref="mongo"/> <!-- mongodb的模板 --> <bean id="mongoTemplate" class="org.springframework.data.mongodb.core.MongoTemplate"> <constructor-arg name="mongoDbFactory" ref="mongoDbFactory"/> </bean> <!-- mongo 配置end --></beans>
详细配置可参见spring官方配置文件
然后springMvc 上传配置文件配置
1.需要的jar包
<dependency> <groupId>commons-fileupload</groupId> <artifactId>commons-fileupload</artifactId> <version>1.3.1</version></dependency><dependency> <groupId>org.apache.commons</groupId> <artifactId>commons-io</artifactId> <version>1.3.2</version></dependency>
2.springMvc 配置
<!-- 定义文件上传解析器 --> <bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver"> <!-- 设定默认编码 --> <property name="defaultEncoding" value="UTF-8"></property> <!-- 设定文件上传的最大值5MB,5*1024*1024 --> <property name="maxUploadSize" value="5242880"></property> </bean>
上传工具类封装FileUpAndDownLoadService .java
package com.r2cf.interactiveweb.service;import java.io.File;import java.io.IOException;import java.io.OutputStream;import java.math.BigDecimal;import java.util.Date;import java.util.Iterator;import java.util.List;import java.util.Map;import javax.annotation.Resource;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import org.bson.types.ObjectId;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.data.mongodb.MongoDbFactory;import org.springframework.data.mongodb.core.MongoTemplate;import org.springframework.stereotype.Component;import org.springframework.stereotype.Service;import org.springframework.web.multipart.MultipartFile;import org.springframework.web.multipart.MultipartHttpServletRequest;import com.mongodb.BasicDBObject;import com.mongodb.DB;import com.mongodb.gridfs.GridFS;import com.mongodb.gridfs.GridFSDBFile;import com.mongodb.gridfs.GridFSFile;/** * 文件上传下载工具类 * @author zhangpeng * *//** * @author zhangpeng * */@Servicepublic class FileUpAndDownLoadService { @Autowired private MongoTemplate mongoTemplate; /** * 获取mongodb数据库文件操作对象 * @return */ private GridFS getGridFS(){ DB db = mongoTemplate.getDb(); GridFS gridFS= new GridFS(db,"fs"); return gridFS; } /** * 文件上传 * @param request * @return * @throws IOException */ public void upload(HttpServletRequest request,BigDecimal userId) throws IOException{ GridFS gridFS= getGridFS(); GridFSFile file = null; MultipartHttpServletRequest mRequest = (MultipartHttpServletRequest) request; Map<String, MultipartFile> fileMap = mRequest.getFileMap(); Iterator<Map.Entry<String, MultipartFile>> it = fileMap.entrySet().iterator(); while(it.hasNext()){ Map.Entry<String, MultipartFile> entry = it.next(); MultipartFile mFile = entry.getValue();//获取文件 file = gridFS.createFile(mFile.getInputStream());// 创建gridfs文件 file.put("filename", mFile.getOriginalFilename()); file.put("userId", userId.toString()); file.put("uploadDate", new Date()); file.put("contentType",mFile.getContentType()); file.save(); } } /** * 查看文件 * @param params k-v 搜索条件 * @return */ public List<GridFSDBFile> viewFiles(Map<String,String> params){ GridFS gridFS= getGridFS(); BasicDBObject basicDBObject = new BasicDBObject(); for(Map.Entry<String, String> entry:params.entrySet()){ String key= entry.getKey(); String value=entry.getValue(); basicDBObject.append(key, value); } List<GridFSDBFile> list = gridFS.find(basicDBObject); return list; } /** * 文件查看与下载 * @param id 文件唯一标示id * @param response * @throws IOException */ public void downLoad(String id,HttpServletResponse response) throws IOException{ GridFS gridFS= getGridFS(); ObjectId objId = new ObjectId(id); GridFSDBFile gridFSDBFile =(GridFSDBFile)gridFS.findOne(objId); if (gridFSDBFile != null) { OutputStream sos = response.getOutputStream(); response.setContentType("application/octet-stream"); // 获取原文件名 String name = (String) gridFSDBFile.get("filename"); String fileName = new String(name.getBytes("utf-8"), "ISO8859-1"); // 设置下载文件名 response.addHeader("Content-Disposition", "attachment; filename=\"" + fileName + "\""); // 向客户端输出文件 gridFSDBFile.writeTo(sos); sos.flush(); sos.close(); } } /** * 单文件删除 * @param id 文件唯一标识 * @return */ public String delete(String id){ GridFS gridFS= getGridFS(); ObjectId objId = new ObjectId(id); gridFS.remove(objId); return "success"; }}
0 0
- spring+mongodb 文件上传与下载实现
- Spring 实现文件上传与下载
- Spring MVC 实现文件上传与下载
- spring文件上传与下载
- 利用spring 实现文件上传、下载
- spring mvc文件上传与下载
- Spring mvc 文件的上传与下载
- Spring MVC之文件上传与下载
- Spring MVC 文件上传与下载
- Spring MVC 文件上传与下载
- Spring mvc文件上传与下载
- spring 文件上传与下载【idea】
- Spring Boot文件上传与下载
- spring boot(23)-文件上传与下载
- 如何用spring集成mongodb实现文件上传
- struts 实现文件上传与下载
- struts 实现文件上传与下载
- struts 实现文件上传与下载
- poj3057(*二分图匹配建模)
- IE下用JavaScript将HTML导出为Word、Pdf
- There is no getter for property named 'account' in 'class java.lang.String'
- Swift 集合类
- 位图图像原图修改
- spring+mongodb 文件上传与下载实现
- UVA 10048 Audiophobia(Floyd)
- Mybatis简介(开源O/R映射框架)
- oracle的一些操作
- 103.NYOJ--DP--拦截导弹
- Android 热修复 Tinker接入及源码浅析
- Android 万能刷新控件
- C语言专题精讲篇_4.7.存储类&作用域&生命周期&链接属性
- [南阳OJ-No.22]素数求和问题|现在给你N个数(0<N<1000),现在要求你写出一个程序,找出这N个数中的所有素数,并求和。