Springboot多图片上传七牛云地址保存到数据库
提示:以下是本篇文章正文内容,下面案例可供参考
1.引入库
如下(示例):这也是我在网上找的
<!--七牛配置依赖-->
<!-- 七牛云 -->
<dependency>
<groupId>com.qiniu</groupId>
<artifactId>qiniu-java-sdk</artifactId>
<version>[7.2.0, 7.2.99]</version>
</dependency>
<dependency>
<groupId>com.squareup.okhttp3</groupId>
<artifactId>okhttp</artifactId>
<version>3.3.1</version>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>com.google.code.gson</groupId>
<artifactId>gson</artifactId>
<version>2.6.2</version>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>com.qiniu</groupId>
<artifactId>happy-dns-java</artifactId>
<version>0.1.4</version>
<scope>compile</scope>
</dependency>
2.七牛云application.yml配置
# 七牛云配置
# bucket是创建的存储空间名
# path对应存储空间的访问域名
qiniu:
#你自己的accesshkey (在个人资料里)
accessKey: **************
#你自己的accesshkey
secretKey: **************
bucket: “你在七牛云创建的空间名”
path: “七牛云给你的测试域名”
#为了在本地也看到 创建的本地路径
baseUploadUrl: e://images/
FileUploadConfig工具类
import com.google.gson.Gson;
import com.qiniu.common.Zone;
import com.qiniu.storage.BucketManager;
import com.qiniu.storage.UploadManager;
import com.qiniu.util.Auth;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
import org.springframework.boot.autoconfigure.web.servlet.MultipartProperties;
import org.springframework.boot.context.properties.EnableConfigurationProperties;
import org.springframework.boot.web.servlet.MultipartConfigFactory;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.multipart.MultipartResolver;
import org.springframework.web.multipart.support.StandardServletMultipartResolver;
import org.springframework.web.servlet.DispatcherServlet;
import javax.servlet.MultipartConfigElement;
import javax.servlet.Servlet;
import java.io.File;
@Configuration
@ConditionalOnClass({Servlet.class, StandardServletMultipartResolver.class, MultipartConfigElement.class})
@ConditionalOnProperty(prefix = "spring.http.multipart", name = "enabled", matchIfMissing = true)
@EnableConfigurationProperties(MultipartProperties.class)
public class FileUploadConfig {
private final MultipartProperties multipartProperties;
@Value("${baseUploadUrl}")
private String baseUploadUrl;
@Value("${qiniu.accessKey}")
private String accessKey;
@Value("${qiniu.secretKey}")
private String secretKey;
public FileUploadConfig(MultipartProperties multipartProperties) {
this.multipartProperties = multipartProperties;
}
/**
* 上传配置
*/
@Bean
@ConditionalOnMissingBean
public MultipartConfigElement multipartConfigElement() {
MultipartConfigFactory factory = new MultipartConfigFactory();
judge(baseUploadUrl);
factory.setLocation(baseUploadUrl);
return factory.createMultipartConfig();
}
public void judge(String filePath){
File file = new File(filePath);
if(!file.exists()){
file.mkdir();
}
}
/**
* 注册解析器
*/
@Bean(name = DispatcherServlet.MULTIPART_RESOLVER_BEAN_NAME)
@ConditionalOnMissingBean(MultipartResolver.class)
public StandardServletMultipartResolver multipartResolver() {
StandardServletMultipartResolver multipartResolver = new StandardServletMultipartResolver();
multipartResolver.setResolveLazily(this.multipartProperties.isResolveLazily());
return multipartResolver;
}
/**
* 华东机房(特别注意)
* Configuration cfg = new Configuration(Zone.zone1());//华北
Configuration cfg = new Configuration(Zone.zone2());//华南
*/
@Bean
public com.qiniu.storage.Configuration qiniuConfig() {
//此处位华东机房
return new com.qiniu.storage.Configuration(Zone.zone0());
}
/**
* 构建一个七牛上传工具实例
*/
@Bean
public UploadManager uploadManager() {
return new UploadManager(qiniuConfig());
}
/**
* 认证信息实例
*
* @return
*/
@Bean
public Auth auth() {
return Auth.create(accessKey, secretKey);
}
/**
* 构建七牛空间管理实例
*/
@Bean
public BucketManager bucketManager() {
return new BucketManager(auth(), qiniuConfig());
}
/**
* 配置gson为json解析工具
*
* @return
*/
@Bean
public Gson gson() {
return new Gson();
}
3.创建实体类和mapper接口
//实体类
public class CsShang {
private Integer id;
private String name;
private Integer price;
//phone是图片路径
//这个类是原本测试用的这次直接拿来用了懒得改
private String phone;
public String getPhone() {
return phone;
}
public void setPhone(String phone) {
this.phone = phone;
}
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Integer getPrice() {
return price;
}
public void setPrice(Integer price) {
this.price = price;
}
}
//mapper 实体类接口
/**
* 新增仓库
*
* @param csShang 仓库
* @return 结果
*/
public int insertCs(CsShang csShang);
4.创建两个接口CsShangService和FileService
//实体类CsShangService接口
public int saveCs(CsShang csShang);
/**
* 多文件上传FileService接口
* @param file
* @return
* @throws QiniuException
*/
Map uploadFile(File file) throws QiniuException;
5.CsShangServiceImpl实现类
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
@Service
public class CsShangServiceImpl implements CsShangService {
@Autowired
CsDetailsMapper csDetailsMapper;
@Override
public int saveCs(CsShang csShang) {
return csDetailsMapper.insertCs(csShang) ;
}
}
6.FileServiceImpl实现类
import com.google.gson.Gson;
import com.qiniu.common.QiniuException;
import com.qiniu.http.Response;
import com.qiniu.storage.UploadManager;
import com.qiniu.storage.model.DefaultPutRet;
import com.qiniu.util.Auth;
import com.qiniu.util.StringMap;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;
import java.io.File;
import java.util.HashMap;
import java.util.Map;
@Service
public class FileServiceImpl implements FileService{
@Autowired
private UploadManager uploadManager;
@Autowired
private Auth auth;
@Value("${qiniu.bucket}")
private String bucket;
private StringMap putPolicy;
@Override
public Map uploadFile(File file) throws QiniuException {
Map map = new HashMap();
Response response = this.uploadManager.put(file,null,getUploadToken());
//解析上传的结果
DefaultPutRet putRet = new Gson().fromJson(response.bodyString(),DefaultPutRet.class);
String imageName = putRet.hash;
int retry = 0;
while(response.needRetry() && retry < 3){
response = this.uploadManager.put(file,null,getUploadToken());
}
map.put("response",response);
map.put("imgName",imageName);
return map;
}
private String getUploadToken(){
return this.auth.uploadToken(bucket,null,3600,putPolicy);
}
}
7.控制层
@RestController
@RequestMapping("/upload")
public class TestController {
@Autowired
FileService fileService;
@Value("${baseUploadUrl}")
private String url;
@Autowired
CsShangService csShangService;
/**
* 多图上传
* @param upfiles
* @return
* @throws IOException
*/
@PostMapping(value = "/uploadImgs")
public List<Map<String,Object>> uploadImgs(@RequestParam(value = "files")MultipartFile upfiles[], CsShang csShang) throws IOException {
List<Map<String,Object>> listMaps = new ArrayList<>();
System.out.println(upfiles);
try{
String paths="";
if(upfiles!=null) {
for (int i=0;i<upfiles.length;i++) {
//map集合记住一定放在for循环里
Map<String, Object> map = new HashMap<>();
if (!upfiles[i].isEmpty()) {
String fileName = upfiles[i].getOriginalFilename();
File file = new File(url + fileName);
// 将MulitpartFile文件转化为file文件格式
upfiles[i].transferTo(file);
Map response = fileService.uploadFile(file);
System.out.println(upfiles[i]);
Object imageName = response.get("imgName");
map.put("url",imageName);
listMaps.add(map);
System.out.println(upfiles[i]);
}
}
//通过对象获取并赋值
csShang.setPhone(listMaps.toString());
//通过调用新增方法 添加路径到数据库
csShangService.saveCs(csShang);
System.out.println(listMaps);
}
}catch (Exception e){
e.printStackTrace();
}
return listMaps;
}
}