七牛云
<dependency>
<groupId>com.qiniu</groupId>
<artifactId>qiniu-java-sdk</artifactId>
<version>7.2.28</version>
</dependency>
qiniu:
accessKey: xxx
secretKey: xxx
bucket:
zone: huadong
domain:
@Configuration
@Data
public class QiniuConfig {
@Value("${qiniu.accessKey}")
private String accessKey;
@Value("${qiniu.secretKey}")
private String secretKey;
@Value("${qiniu.zone}")
private String zone;
@Bean
public com.qiniu.storage.Configuration qiNiuConfig() {
switch (zone) {
case "huadong":
return new com.qiniu.storage.Configuration(Zone.huadong());
case "huabei":
return new com.qiniu.storage.Configuration(Zone.huabei());
case "huanan":
return new com.qiniu.storage.Configuration(Zone.huanan());
case "beimei":
return new com.qiniu.storage.Configuration(Zone.beimei());
default:
throw new BusinessException(ErrorCode.SYSTEM_ERROR, "存储区域配置错误");
}
}
@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();
}
}
public interface IQiniuService {
String uploadFile(File file, String fileName) throws QiniuException;
String uploadFile(InputStream inputStream, String fileName) throws QiniuException;
String delete(String key) throws QiniuException;
}
@Service
public class IQiniuServiceImpl implements IQiniuService, InitializingBean {
@Resource
private UploadManager uploadManager;
@Resource
private BucketManager bucketManager;
@Resource
private Auth auth;
@Value("${qiniu.bucket}")
private String bucket;
@Value("${qiniu.domain}")
private String domain;
private StringMap putPolicy;
@Override
public String uploadFile(File file, String fileName) throws QiniuException {
Response response = this.uploadManager.put(file, fileName, getUploadToken());
int retry = 0;
while (response.needRetry() && retry < 3) {
response = this.uploadManager.put(file, fileName, getUploadToken());
retry++;
}
if (response.statusCode == 200) {
return "http://" + domain + "/" + fileName;
}
return "上传失败!";
}
@Override
public String uploadFile(InputStream inputStream, String fileName) throws QiniuException {
Response response = this.uploadManager.put(inputStream, fileName, getUploadToken(), null, null);
int retry = 0;
while (response.needRetry() && retry < 3) {
response = this.uploadManager.put(inputStream, fileName, getUploadToken(), null, null);
retry++;
}
if (response.statusCode == 200) {
return "http://" + domain + "/" + fileName;
}
return "上传失败!";
}
@Override
public String delete(String key) throws QiniuException {
Response response = bucketManager.delete(this.bucket, key);
int retry = 0;
while (response.needRetry() && retry++ < 3) {
response = bucketManager.delete(bucket, key);
}
return response.statusCode == 200 ? "删除成功!" : "删除失败!";
}
@Override
public void afterPropertiesSet() throws Exception {
this.putPolicy = new StringMap();
putPolicy.put("returnBody", "{\"key\":\"$(key)\",\"hash\":\"$(etag)\",\"bucket\":\"$(bucket)\",\"width\":$(imageInfo.width), \"height\":${imageInfo.height}}");
}
private String getUploadToken() {
return this.auth.uploadToken(bucket, null, 3600, putPolicy);
}
}
@RunWith(SpringRunner.class)
@SpringBootTest
public class QiniuTest {
@Autowired
private IQiniuService qiniuService;
@Test
public void testUpload() throws QiniuException {
String result = qiniuService.uploadFile(new File("D:\\Downloads\\Doraemon.jpeg"), "Doraemon");
System.out.println("访问地址: " + result);
}
@Test
public void testDelete() throws QiniuException {
String result = qiniuService.delete("Doraemon");
System.out.println(result);
}
}