欢迎光临
我们一直在努力

阿里云OSS服务器的使用

import com.aliyun.oss.ClientException; import com.aliyun.oss.OSSClient; import com.aliyun.oss.OSSException; import com.aliyun.oss.model.*; import com.lb.farm.model.OssconfigModel; import org.springframework.web.multipart.MultipartFile; import java.io.*; import java.util.ArrayList; import java.util.Date; import java.util.List; import java.util.UUID; public class OssUtil { private static OssConfigModel config = null; /** * * @MethodName: uploadFile * @Description: OSS单文件上传 * @param file * @param fileType 文件后缀 * @return string 文件地址 */ public static String uploadFile(File file, String fileType){ config = config == null ? new OssConfigModel():config; //通过UUID生成文件名 String fileName = config.getPicLocation() + UUID.randomUUID().toString().toUpperCase() .replace("-", "") +"."+fileType; return putFile(file,fileType,fileName); } /** * * @MethodName: updateFile * @Description: 更新文件:只更新内容,不更新文件名和文件地址。 * (因为地址没变,可能存在浏览器原数据缓存,不能及时加载新数据,例如图片更新,请注意) * @param file * @param fileType * @param oldUrl * @return String */ public static String updateFile(File file,String fileType,String oldUrl){ String fileName = getFileName(oldUrl); if(fileName==null) { return null; } return putFile(file,fileType,fileName); } /** * * @MethodName: replaceFile * @Description: 替换文件:删除原文件并上传新文件,文件名和地址同时替换 * 解决原数据缓存问题,只要更新了地址,就能重新加载数据) * @param file * @param fileType 文件后缀 * @param oldUrl 需要删除的文件地址 * @return String 文件地址 */ public static String replaceFile(File file,String fileType,String oldUrl){ boolean flag = deleteFile(oldUrl); //先删除原文件 if(!flag){ //更改文件的过期时间,让他到期自动删除。  } return uploadFile(file, fileType); } /** * * @MethodName: deleteFile * @Description: 单文件删除 * @param fileUrl 需要删除的文件url * @return boolean 是否删除成功 */ public static boolean deleteFile(String fileUrl){ config = config == null ? new OssConfigModel():config; //根据url获取bucketName String bucketName = OssUtil.getBucketName(fileUrl); //根据url获取fileName String fileName = OssUtil.getFileName(fileUrl); if(bucketName==null||fileName==null){ return false; } OSSClient ossClient = null; try { ossClient = new OSSClient(config.getEndpoint(), config.getAccessKeyId(), config.getAccessKeySecret()); GenericRequest request = new DeleteObjectsRequest(bucketName).withKey(fileName); ossClient.deleteObject(request); } catch (Exception oe) { oe.printStackTrace(); return false; } finally { ossClient.shutdown(); } return true; } /** * * @MethodName: batchDeleteFiles * @Description: 批量文件删除(较快):适用于相同endPoint和BucketName * @param fileUrls 需要删除的文件url集合 * @return int 成功删除的个数 */ public static int deleteFile(List<String> fileUrls){ //成功删除的个数 int deleteCount = 0; //根据url获取bucketName String bucketName = OssUtil.getBucketName(fileUrls.get(0)); //根据url获取fileName List<String> fileNames = OssUtil.getFileName(fileUrls); if(bucketName==null||fileNames.size()<=0) { return 0; } OSSClient ossClient = null; try { ossClient = new OSSClient(config.getEndpoint(), config.getAccessKeyId(), config.getAccessKeySecret()); DeleteObjectsRequest request = new DeleteObjectsRequest(bucketName).withKeys(fileNames); DeleteObjectsResult result = ossClient.deleteObjects(request); deleteCount = result.getDeletedObjects().size(); } catch (OSSException oe) { oe.printStackTrace(); throw new RuntimeException("OSS服务异常:", oe); } catch (ClientException ce) { ce.printStackTrace(); throw new RuntimeException("OSS客户端异常:", ce); } finally { ossClient.shutdown(); } return deleteCount; } /** * * @MethodName: batchDeleteFiles * @Description: 批量文件删除(较慢):适用于不同endPoint和BucketName * @param fileUrls 需要删除的文件url集合 * @return int 成功删除的个数 */ public static int deleteFiles(List<String> fileUrls){ int count = 0; for (String url : fileUrls) { if(deleteFile(url)){ count++; } } return count; } /** * * @MethodName: putFile * @Description: 上传文件 * @param file * @param fileType * @param fileName * @return String */ private static String putFile(File file, String fileType, String fileName){ config = config==null?new OssConfigModel():config; String url = null; //默认null OSSClient ossClient = null; try { ossClient = new OSSClient(config.getEndpoint(), config.getAccessKeyId(), config.getAccessKeySecret()); InputStream input = new FileInputStream(file); ObjectMetadata meta = new ObjectMetadata(); // 创建上传Object的Metadata meta.setContentType(OssUtil.contentType(fileType)); // 设置上传内容类型 meta.setCacheControl("no-cache"); // 被下载时网页的缓存行为 PutObjectRequest request = new PutObjectRequest(config.getBucketName(), fileName,input,meta); //创建上传请求  ossClient.putObject(request); Date expiration = new Date(new Date().getTime() + 3600L * 1000 * 24 * 365 * 10); // 设置URL过期时间为10年 3600L* 1000*24*365*10 //上传成功再返回的文件路径 url = ossClient.generatePresignedUrl(config.getBucketName(), fileName, expiration) .toString() .replaceFirst(config.getBucketUrl(), config.getBaseUrl()); } catch (OSSException | FileNotFoundException | ClientException oe) { oe.printStackTrace(); return null; } finally { if (ossClient != null) { ossClient.shutdown(); } } return url; } /** * * @MethodName: contentType * @Description: 获取文件类型 * @param fileType * @return String */ private static String contentType(String fileType){ fileType = fileType.toLowerCase(); String contentType = ""; switch (fileType) { case "bmp": contentType = "image/bmp"; break; case "gif": contentType = "image/gif"; break; case "png": case "jpeg": case "jpg": contentType = "image/jpeg"; break; case "html":contentType = "text/html"; break; case "txt": contentType = "text/plain"; break; case "vsd": contentType = "application/vnd.visio"; break; case "ppt": case "pptx":contentType = "application/vnd.ms-powerpoint"; break; case "doc": case "docx":contentType = "application/msword"; break; case "xml":contentType = "text/xml"; break; case "mp4":contentType = "video/mp4"; break; default: contentType = "application/octet-stream"; break; } return contentType; } /** * * @MethodName: getBucketName * @Description: 根据url获取bucketName * @param fileUrl 文件url * @return String bucketName */ private static String getBucketName(String fileUrl){ String http = "http://"; String https = "https://"; int httpIndex = fileUrl.indexOf(http); int httpsIndex = fileUrl.indexOf(https); int startIndex = 0; if(httpIndex==-1){ if(httpsIndex==-1){ return null; }else{ startIndex = httpsIndex+https.length(); } }else{ startIndex = httpIndex+http.length(); } int endIndex = fileUrl.indexOf(".oss-"); return fileUrl.substring(startIndex, endIndex); } /** * * @MethodName: getFileName * @Description: 根据url获取fileName * @param fileUrl 文件url * @return String fileName */ private static String getFileName(String fileUrl){ String str = "aliyuncs.com/"; int beginIndex = fileUrl.indexOf(str); if(beginIndex==-1) { return null; } return fileUrl.substring(beginIndex+str.length()); } /** * * @MethodName: getFileName * @Description: 根据url获取fileNames集合 * @param fileUrls 文件url * @return List<String> fileName集合 */ private static List<String> getFileName(List<String> fileUrls){ List<String> names = new ArrayList<>(); for (String url : fileUrls) { names.add(getFileName(url)); } return names; } private static File transferToFile(MultipartFile multipartFile) { // 选择用缓冲区来实现这个转换即使用java 创建的临时文件 使用 MultipartFile.transferto()方法 。 File file = null; try { String originalFilename = multipartFile.getOriginalFilename(); String[] filename = originalFilename.split("\\."); file=File.createTempFile(filename[0], filename[1]); multipartFile.transferTo(file); file.deleteOnExit(); } catch (IOException e) { e.printStackTrace(); } return file; } }

  • 海报
海报图正在生成中...
赞(0) 打赏
声明:
1、本博客不从事任何主机及服务器租赁业务,不参与任何交易,也绝非中介。博客内容仅记录博主个人感兴趣的服务器测评结果及一些服务器相关的优惠活动,信息均摘自网络或来自服务商主动提供;所以对本博客提及的内容不作直接、间接、法定、约定的保证,博客内容也不具备任何参考价值及引导作用,访问者需自行甄别。
2、访问本博客请务必遵守有关互联网的相关法律、规定与规则;不能利用本博客所提及的内容从事任何违法、违规操作;否则造成的一切后果由访问者自行承担。
3、未成年人及不能独立承担法律责任的个人及群体请勿访问本博客。
4、一旦您访问本博客,即表示您已经知晓并接受了以上声明通告。
文章名称:《阿里云OSS服务器的使用》
文章链接:https://www.456zj.com/3680.html
本站资源仅供个人学习交流,请于下载后24小时内删除,不允许用于商业用途,否则法律问题自行承担。

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址