- Maven依赖
<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>
- application.properties配置文件
#七牛云相关配置
qiniu.accessKey=n-Of7VP5...zTPn7wJ #七牛云账号下找就有的
qiniu.secretKey=DtxK-apko...m0i94zRxW
qiniu.bucket=yo...ku #bucket是创建的存储空间名
qiniu.path=qfbir9...ddn.com #path对应存储空间的访问域名
baseUploadUrl=C://Users/Lenovo/Desktop/TouYiKu/qForum/src/main/resources/static/ #本地存储路径
- controller接口
@RestController
@RequestMapping
public class UploadController {
@Autowired
private IUploadService uploadService;
@Value("${baseUploadUrl}")
private String url;
@PostMapping("/upload")
@ResponseBody
public Result uploadImg(@RequestParam(value = "file", required=false) MultipartFile upfile) throws IOException {
Map<String,Object> map = new HashMap<>();
String fileName = upfile.getOriginalFilename();
System.out.println(fileName);
File file = new File(url + fileName);
Object imageName = null;
try{
upfile.transferTo(file);
Map response = uploadService.uploadFile(file);
imageName = response.get("imgName");
}catch (Exception e){
e.printStackTrace();
}
return new Result(200, "success to upload the file.", imageName);
}
}
- UploadConfig实体类
package org.example.domain;
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.client.RestTemplate;
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 UploadConfig {
private final MultipartProperties multipartProperties;
@Value("${baseUploadUrl}")
private String baseUploadUrl;
@Value("${qiniu.accessKey}")
private String accessKey;
@Value("${qiniu.secretKey}")
private String secretKey;
public UploadConfig(MultipartProperties multipartProperties) {
this.multipartProperties = multipartProperties;
}
@Bean
public RestTemplate restTemplate() {
return new RestTemplate();
}
@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;
}
@Bean
public com.qiniu.storage.Configuration qiniuConfig() {
return new com.qiniu.storage.Configuration(Zone.zone1());
}
@Bean
public UploadManager uploadManager() {
return new UploadManager(qiniuConfig());
}
@Bean
public Auth auth() {
return Auth.create(accessKey, secretKey);
}
@Bean
public BucketManager bucketManager() {
return new BucketManager(auth(), qiniuConfig());
}
@Bean
public Gson gson() {
return new Gson();
}
}
- service业务实现
package org.example.service.Impl;
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.example.service.IUploadService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;
import org.springframework.web.client.RestTemplate;
import javax.annotation.Resource;
import java.io.File;
import java.util.HashMap;
import java.util.Map;
@Service
public class UploadServiceImpl implements IUploadService {
@Autowired
private UploadManager uploadManager;
@Autowired
private Auth auth;
@Autowired
private RestTemplate restTemplate;
@Value("${qiniu.bucket}")
private String bucket;
private StringMap putPolicy;
@Override
public Map uploadFile(File file) throws QiniuException {
Map map = new HashMap();
System.out.println(file);
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);
}
}