今天记录下通过七牛云文件存储来实现文件的上传与下载
文件上传
/**
* 上传
* @throws FileNotFoundException
*/
private static void upload() throws FileNotFoundException {
//构造一个带指定 Region 对象的配置类
Configuration cfg = new Configuration(Region.huanan());
//...其他参数参考类注释
UploadManager uploadManager = new UploadManager(cfg);
//...生成上传凭证,然后准备上传
//自己七牛云上的ak
String accessKey = "*****************";
//自己七牛云上的sk
String secretKey = "*****************";
//自己七牛云上的设置的空间名
String bucket = "*********";
//如果是Windows情况下,格式是 D:\\qiniu\\test.png
String localFilePath = "E:\\test\\girls.jpg";
//默认不指定key的情况下,以文件内容的hash值作为文件名
String key = null;
Auth auth = Auth.create(accessKey, secretKey);
String upToken = auth.uploadToken(bucket);
try {
Response response = uploadManager.put(localFilePath, key, upToken);
//解析上传成功的结果
DefaultPutRet putRet = new Gson().fromJson(response.bodyString(), DefaultPutRet.class);
System.out.println(putRet.key);
System.out.println(putRet.hash);
} catch (QiniuException ex) {
Response r = ex.response;
System.err.println(r.toString());
try {
System.err.println(r.bodyString());
} catch (QiniuException ex2) {
//ignore
}
}
}
文件下载
/**
* 下载
* @throws IOException
*/
public static void download() throws IOException {
//七牛云上存储文件生成的文件名
String fileName = "FlBbPMKQw-ifOiIGa8cKR7VHazGr";
//自己七牛云上的域名
String domainOfBucket = "**************";
String encodedFileName = URLEncoder.encode(fileName, "utf-8").replace("+", "%20");
String finalUrl = String.format("%s/%s", domainOfBucket, encodedFileName);
System.out.println(finalUrl);
}
测试
当我在运行上传图片的时候控制台会打印储存在七牛云上自动生成的文件名,我的为:
FlBbPMKQw-ifOiIGa8cKR7VHazGr
再运行下载的文件会自动生成一个文件链接,在浏览器上访问生成的链接即可,我的控制台生成的链接为
qz3gdw53p.hn-bkt.clouddn.com/FlBbPMKQw-ifOiIGa8cKR7VHazGr
访问以上链接
文件上传与下载工具类
@Slf4j
public class QiniuUtil {
public static void upload(String accessKey, String secretKey,String bucket,String key,byte[] uploadBytes){
//构造一个带指定 Region 对象的配置类
Configuration cfg = new Configuration(Region.huanan());
//...其他参数参考类注释
UploadManager uploadManager = new UploadManager(cfg);
// String s = JSON.toJSONString(cfg); //{birthday:2019-01-01}
// Configuration configuration = JSON.parseObject(s, Configuration.class);
//...生成上传凭证,然后准备上传
//默认不指定key的情况下,以文件内容的hash值作为文件名
try {
//认证
Auth auth = Auth.create(accessKey, secretKey);
String upToken = auth.uploadToken(bucket);
try {
Response response = uploadManager.put(uploadBytes, key, upToken);
//解析上传成功的结果
DefaultPutRet putRet = new Gson().fromJson(response.bodyString(), DefaultPutRet.class);
// System.out.println("==================================="+putRet.key);
// System.out.println("==================================="+putRet.hash);
} catch (QiniuException ex) {
Response r = ex.response;
System.err.println(r.toString());
log.error("把文件上传到七牛云异常:{}",r.toString());
throw new RuntimeException("把文件上传到七牛云异常");
/* try {
System.err.println(r.bodyString());
} catch (QiniuException ex2) {
//ignore
}*/
}
} catch (Exception ex) {
//ignore
log.error("把文件上传到七牛云异常:{}",ex.getMessage());
throw new RuntimeException("把文件上传到七牛云异常");
}
}
public static String uploadImg(String accessKey, String secretKey,String bucket,byte[] uploadBytes){
//构造一个带指定 Region 对象的配置类
Configuration cfg = new Configuration(Region.huanan());
//...其他参数参考类注释
UploadManager uploadManager = new UploadManager(cfg);
//...生成上传凭证,然后准备上传
//默认不指定key的情况下,以文件内容的hash值作为文件名
try {
//认证
Auth auth = Auth.create(accessKey, secretKey);
String upToken = auth.uploadToken(bucket);
String key = null;
try {
Response response = uploadManager.put(uploadBytes, key, upToken);
//解析上传成功的结果
DefaultPutRet putRet = new Gson().fromJson(response.bodyString(), DefaultPutRet.class);
return putRet.key;
} catch (QiniuException ex) {
Response r = ex.response;
System.err.println(r.toString());
log.error("把文件上传到七牛云异常:{}",r.toString());
throw new RuntimeException("把文件上传到七牛云异常");
}
} catch (Exception ex) {
//ignore
log.error("把文件上传到七牛云异常:{}",ex.getMessage());
throw new RuntimeException("把文件上传到七牛云异常");
}
}
}