导入依赖
<!-- 七牛云 -->
<dependency>
<groupId>com.qiniu</groupId>
<artifactId>qiniu-java-sdk</artifactId>
<version>[7.5.0, 7.5.99]</version>
</dependency>
<!--Gosn依赖-->
<dependency>
<groupId>com.google.code.gson</groupId>
<artifactId>gson</artifactId>
<version>2.8.6</version>
</dependency>
application.yml 配置
# 七牛云
oss:
qiniu:
domain: 填入你的访问域名 # 访问域名(默认使用七牛云测试域名)
accessKey: 填入你的公钥 # 公钥
secretKey: 填入你的私钥 # 私钥
bucketName: 填入你的存储空间名 #存储空间名称
QiNiuYunConfig.java
@Configuration
public class QiNiuYunConfig {
/**
* 七牛域名domain
*/
@Value("${oss.qiniu.domain}")
private String qiniuDomain;
/**
* 七牛ACCESS_KEY
*/
@Value("${oss.qiniu.accessKey}")
private String qiniuAccessKey;
/**
* 七牛SECRET_KEY
*/
@Value("${oss.qiniu.secretKey}")
private String qiniuSecretKey;
/**
* 七牛空间名
*/
@Value("${oss.qiniu.bucketName}")
private String qiniuBucketName;
protected static Logger logger = LoggerFactory.getLogger(QiNiuYunConfig.class);
public String uploadPhoto(String filename, FileInputStream file) {
// 构造一个带指定Region对象的配置类,注意后面的Region个地区不一样的
Configuration cfg = new Configuration(Region.region2());
cfg.useHttpsDomains = false;
UploadManager uploadManager = new UploadManager(cfg);
// 生成上传凭证,然后准备上传
Auth auth = Auth.create(qiniuAccessKey, qiniuSecretKey);
String upToken = auth.uploadToken(qiniuBucketName);
try {
Response response = uploadManager.put(file, filename, upToken, null, null);
// 解析上传成功的结果
DefaultPutRet putRet = new Gson().fromJson(response.bodyString(), DefaultPutRet.class);
// 这个returnPath是获得到的外链地址,通过这个地址可以直接打开图片
return "http://"+qiniuDomain+"/"+putRet.key;
} catch (QiniuException ex) {
Response r = ex.response;
logger.error(r.toString());
System.err.println();
try {
logger.error(r.bodyString());
} catch (QiniuException ex2) {
r = ex2.response;
logger.error(r.toString());
}
}
return "";
}
public boolean deletePhoto(String fileName) {
Configuration configuration = new Configuration(Region.region2());
Auth auth = Auth.create(qiniuAccessKey, qiniuSecretKey);
BucketManager bucketManager = new BucketManager(auth, configuration);
try {
if (fileName != null) {
bucketManager.delete(qiniuBucketName, fileName);
return true;
}
} catch (QiniuException ex) {
//如果遇到异常,说明删除失败
logger.error(String.valueOf(ex.code()));
logger.error(ex.response.toString());
}
return false;
}
}
使用案例:
七牛云返回的路径格式:
http:// 访问域名 / 图片名称
注:
这里的RespBean是自定义的响应类
@Autowired
protected static final Logger logger = LoggerFactory.getLogger(QrCodeController.class);
private QiNiuYunConfig qiNiuYunConfig;
@Autowired
private IQrCodeService iQrCodeService;
@PostMapping("qrCode/insert")
@ApiOperation("上传二维码图片")
@ApiImplicitParams({
@ApiImplicitParam(name = "photoName", value = "图片名称", dataTypeClass = String.class)
})
public RespBean insert(@RequestParam String photoName, @RequestPart("file") MultipartFile file) {
QrCode qrCode = new QrCode();
qrCode.setPhotoName(photoName);
// 获取文件名
//String fileName = file.getOriginalFilename();
// 生成随机的图片名 (这个案例中没使用)
//String photoName = UUID.randomUUID() + "-" +fileName;
if (!file.isEmpty()) {
try {
FileInputStream inputStream = (FileInputStream) file.getInputStream();
// 这里接收 七牛云返回的 图片地址
String path = iQiNiuYunService.uploadPhoto(photoName, inputStream);
qrCode.setPhotoAddress(path);
// 将二维码实体qrcode 插入到mysql数据库中
if (iQrCodeService.insert(qrCode)) {
logger.info("上传成功!");
return RespBean.ok("上传成功!");
}
} catch (IOException e) {
e.printStackTrace();
}
}
return RespBean.error("上传失败!");
}
@DeleteMapping("qrCode/delete")
@ApiOperation("根据照片名删除图片")
@ApiImplicitParam(name = "photoName", value = "图片名称",dataTypeClass = String.class)
public RespBean delete(@RequestParam String photoName){
if (iQiNiuYunService.deletePhoto(photoName)&&iQrCodeService.delete(photoName)){
return RespBean.ok("删除成功");
}
return RespBean.ok("删除失败,未找到该图片!");
}
相关说明:
关于 Region 对象和机房的关系如下:
机房 Region
华东 Region.region0() , Region.huadong()
华北 Region.region1() , Region.huabei()
华南 Region.region2() , Region.huanan()
北美 Region.regionNa0() , Region.beimei()