下载工具类
package com.yy.utils;
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import com.qiniu.util.Auth;
import okhttp3.OkHttpClient;
import okhttp3.Request;
import okhttp3.Response;
import okhttp3.ResponseBody;
/**
* @author Marston
* @date 2021/11/17
*/
public class QiniuDowloadUtils {
String accessKey = "8Pi4mJI***"; //AccessKey值
String secretKey = "aACHfFh***0zPRg*CyR3"; //SecretKey值
/**
* 获取下载文件路径,即:donwloadUrl
* @return
*/
public static String getDownloadUrl(String targetUrl) {
//密钥配置
Auth auth = Auth.create(accessKey,secretKey);
String downloadUrl = auth.privateDownloadUrl(targetUrl);
return downloadUrl;
}
/**
* 下载,主要运用的工具类
*/
public static void download(String targetUrl) {
//获取downloadUrl
String downloadUrl = getDownloadUrl(targetUrl);
//获取文件后缀
int index = targetUrl.lastIndexOf(".");//获取最后一个点的位置
String extention = targetUrl.substring(index);//通过截取字符串获取:.txt
//本地保存路径,即文件保存的盘(位置)
String filePath = "E:/thefiirstfiles/EnglishPractice/"+"体检报告"+extention;
download(downloadUrl, filePath);
}
/**
* 通过发送http get 请求获取文件资源
* @param url
* @param filepath
* @return
*/
private static void download(String url, String filepath) {
OkHttpClient client = new OkHttpClient();
System.out.println(url);
Request req = new Request.Builder().url(url).build();
Response resp = null;
try {
resp = client.newCall(req).execute();
System.out.println(resp.isSuccessful());
if(resp.isSuccessful()) {
ResponseBody body = resp.body();
InputStream is = body.byteStream();
byte[] data = readInputStream(is);
File imgFile = new File(filepath); //下载到本地的图片命名
FileOutputStream fops = new FileOutputStream(imgFile);
fops.write(data);
fops.close();
}
} catch (IOException e) {
e.printStackTrace();
System.out.println("Unexpected code " + resp);
}
}
/**
* 读取字节输入流内容
* @param is
* @return
*/
private static byte[] readInputStream(InputStream is) {
ByteArrayOutputStream writer = new ByteArrayOutputStream();
byte[] buff = new byte[1024 * 2];
int len = 0;
try {
while((len = is.read(buff)) != -1) {
writer.write(buff, 0, len);
}
is.close();
} catch (IOException e) {
e.printStackTrace();
}
return writer.toByteArray();
}
}
方法介绍
getDownloadUrl
这个方法里面所使用的类是七牛云自己方法,主要是通过秘钥获取七牛云下载的地址
download(String targetUrl)
该方法是主要使用的方法,也就是说在想实现七牛云下载功能时,就直接调用这个方法就可以了,这个类里面的其他方法都是为这个方法服务,参数是七牛云里面的文件的外链链接
download(String url, String filepath)
这个是 download(String targetUrl)方法最后所调用的方法,功能就是实现文件保存在想要保存的位置,其中filepath参数就是自己想要保存文件的位置
readInputStream
这个方法被download(String url, String filepath)调用,主要就是为了实现文件的保存本地功能,使用的是字节流保存,当然也可以更改为其他的流
运用
//文件下载
@RequestMapping("/downloadReport")
public Result downloadReport(String fileUrl){
System.out.println("文件下载的:"+fileUrl);
try {
QiniuDowloadUtils.download(fileUrl);
}catch (Exception e){
e.printStackTrace();
return new Result(false,MessageConstant.FILE_DOWNLOAD_FAIL);
}
return new Result(true,MessageConstant.FILE_DOWNLOAD_SUCCESS);
}
实现下载的功能就这一句话:QiniuDowloadUtils.download(fileUrl);
其中QiniuDowloadUtils是自己封装的util类名,因为我使用的是static方法,所以可以直接类名.方法进行调用