在Java中使用OSS的工具类
先导入OSS的包
<dependency>
<groupId>com.aliyun.oss</groupId>
<artifactId>aliyun-sdk-oss</artifactId>
<version>3.10.2</version>
</dependency>
创建OSS对象需要的参数
// endpoint是访问OSS的域名。如果您已经在OSS的控制台上 创建了Bucket,请在控制台上查看域名。
// 如果您还没有创建Bucket,endpoint选择请参看文档中心的“开发人员指南 > 基本概念 > 访问域名”,
// 链接地址是:https://help.aliyun.com/document_detail/oss/user_guide/oss_concept/endpoint.html?spm=5176.docoss/user_guide/endpoint_region
// endpoint的格式形如“http://oss-cn-hangzhou.aliyuncs.com/”,注意http://后不带bucket名称,
// 比如“http://bucket-name.oss-cn-hangzhou.aliyuncs.com”,是错误的endpoint,请去掉其中的“bucket-name”。
// 带有internal的是OSS的内网地址,
// 例如“http://oss-cn-hangzhou-internal.aliyuncs.com”,表示是杭州的内网地址,只能通过数据中心在杭州的ECS访问,或者是配置NGINX做转发
private static String endpoint = "http://oss-cn-hangzhou-internal.aliyuncs.com";
// accessKeyId和accessKeySecret是OSS的访问密钥,您可以在控制台上创建和查看,
// 创建和查看访问密钥的链接地址是:https://ak-console.aliyun.com/#/。
// 注意:accessKeyId和accessKeySecret前后都没有空格,从控制台复制时请检查并去除多余的空格。
private static String accessKeyId = "**************";
private static String accessKeySecret = "*****************";
// Bucket用来管理所存储Object的存储空间,详细描述请参看“开发人员指南 > 基本概念 > OSS基本概念介绍”。
// Bucket命名规范如下:只能包括小写字母,数字和短横线(-),必须以小写字母或者数字开头,长度必须在3-63字节之间。
// 图片的访问路径是https://bucketName.endpoint/XXXXXXX.jpg
private static String bucketName = "draw-map";
编写工具类
/**
* OSS 文件上传
*
* @param fileDir 完整的本地路径 例: /mnt/rongchuang/upload_resource/spot/imgs/2020/02/26/xxxxxxx.png
* @param file 要上传的文件对象
* @return
*/
public static Boolean uploadFile(String fileDir, File file) {
OSS ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret);
boolean flag = true;
try {
// 上传
InputStream input = new FileInputStream(file);
ossClient.putObject(bucketName, fileDir, input);
// 关闭client
ossClient.shutdown();
} catch (OSSException oe) {
flag = false;
oe.printStackTrace();
} catch (ClientException ce) {
flag = false;
ce.printStackTrace();
} catch (FileNotFoundException e) {
flag = false;
e.printStackTrace();
} finally {
ossClient.shutdown();
}
return flag;
}
/**
* @return String
* @MethodName: contentType
* @Description: 获取文件类型
*/
private static String contentType(String fileType) {
fileType = fileType.toLowerCase();
String contentType = "";
if (fileType.equals("bmp")) {
contentType = "image/bmp";
} else if (fileType.equals("gif")) {
contentType = "image/gif";
} else if (fileType.equals("png") || fileType.equals("jpeg") || fileType.equals("jpg")) {
contentType = "image/jpeg";
} else if (fileType.equals("html")) {
contentType = "text/html";
} else if (fileType.equals("txt")) {
contentType = "text/plain";
} else if (fileType.equals("vsd")) {
contentType = "application/vnd.visio";
} else if (fileType.equals("ppt") || fileType.equals("pptx")) {
contentType = "application/vnd.ms-powerpoint";
} else if (fileType.equals("doc") || fileType.equals("docx")) {
contentType = "application/msword";
} else if (fileType.equals("xml")) {
contentType = "text/xml";
} else if (fileType.equals("mp4")) {
contentType = "video/mp4";
} else {
contentType = "application/octet-stream";
}
return contentType;
}
/**
*
* @MethodName: deleteFile
* @Description: 单文件删除
* @param fileUrl 需要删除的文件url
* @return boolean 是否删除成功
*/
public static boolean deleteFile(String fileUrl){
OSS ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret);
try {
boolean exist = ossClient.doesObjectExist(bucketName, fileUrl);
if (!exist) {
return false;
}
ossClient.deleteObject(bucketName, fileUrl);
} catch (Exception oe) {
oe.printStackTrace();
return false;
} finally {
ossClient.shutdown();
}
return true;
}
/**
* 生成文件名
* @return
*/
public static String getFileName(String dirName, String fileName){
String root = LoadBase.getUPOAD_PATH();
System.out.println(root);
String d = LoadBase.getDateDir();
String dir = LoadBase.getRESOURCE_REWRITE_DIR() + File.separator
+ dirName;
String newFileName = getNewName(fileName);
System.out.println(newFileName);
return (dir + d + newFileName).replace(File.separator, "/");
}
public static String getNewName(String uploadFileFileName) {
String extension = FilenameUtils.getExtension(uploadFileFileName);
StringBuffer fileRandomName = new StringBuffer();
fileRandomName.append(RandomName.ConfirmId(20));
fileRandomName.append(".");
fileRandomName.append(extension);
return fileRandomName.toString();
}