首先得去七牛云注册账号,然后去控制台创建存储空间

6.png

这里申请的是测试域名,所以只有30天的有效期,到期了图片就会被清除。所以只是供我们玩一下,真正的开发得用自己的域名。

接下来就是申请AK和SK,在个人中心

7.png

做好了这些准备,那么就可以开始写代码了。

我这里使用的是SpringBoot,这样可以省去很多配置,在这个项目中,几乎是零配置。

图片上传,这里需要两个jar包

com.alibaba

fastjson

1.2.31

com.qiniu

qiniu-java-sdk

7.2.7

接下来就开始撸代码了。

首先创建一个html页面

Insert title here


上传

最简单原始。但这里还是有两个注意的地方,一个是method属性,一个是enctype属性。

接下来就是FileUtil.java

public class FileUtil {
// 图片允许的后缀扩展名
public static String[] IMAGE_FILE_EXTD = new String[] { "png", "bmp", "jpg", "jpeg","pdf" };
public static boolean isFileAllowed(String fileName) {
for (String ext : IMAGE_FILE_EXTD) {
if (ext.equals(fileName)) {
return true;
}
}
return false;
}
}

这个类只有一个简单的方法,那就是判断图片的后缀是否符合要求。

接下来写QiniuService.java

@Service
public class QiniuService {
private static final Logger logger = LoggerFactory.getLogger(QiniuService.class);
// 设置好账号的ACCESS_KEY和SECRET_KEY
String ACCESS_KEY = "###################";
String SECRET_KEY = "###################";
// 要上传的空间
String bucketname = "####";
// 密钥配置
Auth auth = Auth.create(ACCESS_KEY, SECRET_KEY);
// 构造一个带指定Zone对象的配置类,不同的七云牛存储区域调用不同的zone
Configuration cfg = new Configuration(Zone.zone0());
// ...其他参数参考类注释
UploadManager uploadManager = new UploadManager(cfg);
// 测试域名,只有30天有效期
private static String QINIU_IMAGE_DOMAIN = "http://############/";
// 简单上传,使用默认策略,只需要设置上传的空间名就可以了
public String getUpToken() {
return auth.uploadToken(bucketname);
}
public String saveImage(MultipartFile file) throws IOException {
try {
int dotPos = file.getOriginalFilename().lastIndexOf(".");
if (dotPos < 0) {
return null;
}
String fileExt = file.getOriginalFilename().substring(dotPos + 1).toLowerCase();
// 判断是否是合法的文件后缀
if (!FileUtil.isFileAllowed(fileExt)) {
return null;
}
String fileName = UUID.randomUUID().toString().replaceAll("-", "") + "." + fileExt;
// 调用put方法上传
Response res = uploadManager.put(file.getBytes(), fileName, getUpToken());
// 打印返回的信息
if (res.isOK() && res.isJson()) {
// 返回这张存储照片的地址
return QINIU_IMAGE_DOMAIN + JSONObject.parseObject(res.bodyString()).get("key");
} else {
logger.error("七牛异常:" + res.bodyString());
return null;
}
} catch (QiniuException e) {
// 请求失败时打印的异常的信息
logger.error("七牛异常:" + e.getMessage());
return null;
}
}
}

这里需要填的地方我都用#########标注了,要注意的是Zone.zone0()这个方法,因为你创建的存储空间可能是华北的,华东的或者其他区域的,所以这里可能得调用zone1或者zone2。具体视情况而定。

最后当然就是controller了。

@Controller
public class TestController {
@Autowired
private QiniuService qiniuService;
@RequestMapping(value = "/testUpload", method = RequestMethod.POST)
@ResponseBody
public String uploadImage(@RequestParam("file") MultipartFile file,HttpServletRequest request) {
if(file.isEmpty()) {
return "error";
}
try {
String fileUrl=qiniuService.saveImage(file);
return "success, imageUrl = " + fileUrl;
} catch (IOException e) {
e.printStackTrace();
}
return "fail";
}
}

上传成功,则返回图片的地址。

启动SpringBoot项目,输入地址

9.png

选择一张图片点击上传,发现返回success和图片的url。

8.png

去七牛云存储空间看内容管理,发现图片已经上传到了七牛云。

10.png