import com.qiniu.common.QiniuException;
import com.qiniu.http.Response;
import com.qiniu.storage.UploadManager;
import com.qiniu.util.Auth;
import com.qiniu.util.StringMap;
import com.squareup.okhttp.OkHttpClient;
import com.squareup.okhttp.Request;
import com.squareup.okhttp.ResponseBody;
import java.io.*;
public class QiniuUtil {
//设置好账号的ACCESS_KEY和SECRET_KEY
String ACCESS_KEY = “”; //这两个登录七牛 账号里面可以找到
String SECRET_KEY = “”;
//要上传的空间
String bucketname = “”; //对应要上传到七牛上 你的那个路径(自己建文件夹 注意设置私有)
//上传到七牛后保存的文件名
//密钥配置
Auth auth = Auth.create(ACCESS_KEY, SECRET_KEY);
//创建上传对象
UploadManager uploadManager = new UploadManager();
/**
-
简单上传,使用默认策略,只需要设置上传的空间名就可以了
-
@param fileName 文件上传至七牛云空间的名称
-
@return
*/
public String getUpToken(String fileName) {
//return auth.uploadToken(bucketname);
//:,表示只允许用户上传指定key的文件。在这种格式下文件默认允许“修改”,已存在同名资源则会被本次覆盖。
//如果希望只能上传指定key的文件,并且不允许修改,那么可以将下面的 insertOnly 属性值设为 1。
//第三个参数是token的过期时间
return auth.uploadToken(bucketname, fileName, 3600, new StringMap().put(“insertOnly”, 0));
}
/**
-
普通上传
-
@param filePath 文件路径
-
@param fileName 文件上传至七牛云空间的名称
-
@throws IOException
*/
public void upload(String filePath, String fileName) {
try {
//调用put方法上传
Response res = uploadManager.put(filePath, fileName, getUpToken(fileName));
//打印返回的信息
System.out.println(res.bodyString());
} catch (QiniuException e) {
Response r = e.response;
// 请求失败时打印的异常的信息
System.out.println(r.toString());
try {
//响应的文本信息
System.out.println(r.bodyString());
} catch (QiniuException e1) {
//ignore
e.printStackTrace();
}
}
}
/**
-
获取下载文件路径,即:donwloadUrl
-
@return
*/
public String getDownloadUrl(String targetUrl) {
String downloadUrl = auth.privateDownloadUrl(targetUrl);
return downloadUrl;
}
/**
-
文件下载
-
@param targetUrl
*/
public void download(String targetUrl) {
//获取downloadUrl
String downloadUrl = getDownloadUrl(targetUrl);
//本地保存路径
String filePath = “E:\chen\”;
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();
com.squareup.okhttp.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 file = new File(filepath);
if (!file.exists() && !file.isDirectory()) {
System.out.println(“=文件夹不存在=创建====”);
file.mkdir();
}
File imgFile = new File(filepath + “888.jpg”);
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();
}
public static void main(String args[]) throws IOException {
String fileName = “xiao.jpg”;
//上传文件的路径
String FilePath = “C:\Users\ChenXiao\Pictures\Saved Pictures\xiao.jpg”; //本地要上传文件路径
// new QiniuUtil().upload(FilePath,fileName);
//构造私有空间的需要生成的下载的链接;
//格式: http://私有空间绑定的域名/空间下的文件名
String targetUrl = “http://私有空间绑定的域名/下载文件名称.后缀”
new QiniuUtil().download(targetUrl);
}
}
三、具体业务例子(七牛云做图片服务器–SpringBoot)
==========================================================================================
com.alibaba
fastjson
1.2.31
com.qiniu
qiniu-java-sdk
7.2.7
上传
最简单原始。但这里还是有两个注意的地方,一个是method属性,一个是enctype属性。
3.3.接下来就是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;
}
}
必看视频!获取2024年最新Java开发全套学习资料 备注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;
}
总结
对于面试还是要好好准备的,尤其是有些问题还是很容易挖坑的,例如你为什么离开现在的公司(你当然不应该抱怨现在的公司有哪些不好的地方,更多的应该表明自己想要寻找更好的发展机会,自己的一些现实因素,比如对于我而言是现在应聘的公司离自己的家更近,又或者是自己工作到达了迷茫期,想跳出迷茫期等等)
Java面试精选题、架构实战文档
整理不易,觉得有帮助的朋友可以帮忙点赞分享支持一下小编~
你的支持,我的动力;祝各位前程似锦,offer不断!
int dotPos = file.getOriginalFilename().lastIndexOf(“.”);
if (dotPos < 0) {
return null;
}
String fileExt = file.getOriginalFilename().substring(dotPos + 1).toLowerCase();
// 判断是否是合法的文件后缀
if (!FileUtil.isFileAllowed(fileExt)) {
return null;
}
总结
对于面试还是要好好准备的,尤其是有些问题还是很容易挖坑的,例如你为什么离开现在的公司(你当然不应该抱怨现在的公司有哪些不好的地方,更多的应该表明自己想要寻找更好的发展机会,自己的一些现实因素,比如对于我而言是现在应聘的公司离自己的家更近,又或者是自己工作到达了迷茫期,想跳出迷茫期等等)
[外链图片转存中…(img-mKpG0dDP-1716459138800)]
Java面试精选题、架构实战文档
整理不易,觉得有帮助的朋友可以帮忙点赞分享支持一下小编~
你的支持,我的动力;祝各位前程似锦,offer不断!