Loading

使用七牛云做图片服务器(Java代码)

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

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

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

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

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

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

    <dependency>
		<groupId>com.alibaba</groupId>
		<artifactId>fastjson</artifactId>
		<version>1.2.31</version>
	</dependency>

	<dependency>
		<groupId>com.qiniu</groupId>
		<artifactId>qiniu-java-sdk</artifactId>
		<version>7.2.7</version>
	</dependency>

接下来就开始撸代码了。

首先创建一个html页面

<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
	<form action="/testUpload" method="post" enctype="multipart/form-data">
		<input type="file" name="file" />
		<button type="submit">上传</button>
	</form>
	
</body>
</html>

最简单原始。但这里还是有两个注意的地方,一个是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

posted @ 2018-12-30 21:04  CodeTiger  阅读(57)  评论(0编辑  收藏  举报