Java实现阿里云oss文预览上传和下载

Java实现阿里云oss文预览上传和下载

2023年7月3日发(作者:)

Java实现阿⾥云oss⽂预览上传和下载第⼀步:引⼊maven依赖scommons-lang3aliyun-sdk-oss2.8.2 第⼆步:阿⾥云oss⼯具类import ent;import .*;import ;import tory;import .*;/** * 阿⾥云 OSS⽂件类 */public class AliOssCloudUtil { Log log = (); /** * ⽤户的存储空间所在数据中⼼的访问域名 */ private String endpoint = ""; /** * OSS签名key */ private String accessKeyId = "LTAI5tSJSDtUaXXXX"; /** * OSS签名密钥 */ private static final String accessKeySecret = "AQLmguaT1BFsOi5oe07iMUXXXXX"; /** * 存储空间名称 */ private static final String bucketName = "oss-uav-oss"; //⽂件存储⽬录 private String filedir = "uav/"; private OSSClient ossClient; public AliOssCloudUtil() { ossClient = new OSSClient(endpoint, accessKeyId, accessKeySecret); } public String getFiledir() { return r; } //⾃定义上传⽂件夹 public AliOssCloudUtil(String filedir) { r = filedir; ossClient = new OSSClient(endpoint, accessKeyId, accessKeySecret); } /** * 初始化 */ public void init() { ossClient = new OSSClient(endpoint, accessKeyId, accessKeySecret); } /** * 销毁 */ public void destory() { wn(); } /** * 上传到OSS服务器 * * @param instream ⽂件流 * @param fileName ⽂件名称 包括后缀名 * @return 出错返回"" ,唯⼀MD5数字签名 */ public String uploadFile2OSS(InputStream instream, String fileName) { String ret = ""; // 判断bucket是否已经存在,不存在进⾏创建 if (!doesBucketExist()) { createBucket(); } try { //创建上传Object的Metadata ObjectMetadata objectMetadata = new ObjectMetadata(); tentLength(ble()); heControl("no-cache"); der("Pragma", "no-cache"); tentType(getcontentType(ing(dexOf(".")))); tentDisposition("inline;filename=" + fileName); // 指定上传⽂件操作时是否覆盖同名Object。 // 不指定x-oss-forbid-overwrite时,默认覆盖同名Object。 // 指定x-oss-forbid-overwrite为false时,表⽰允许覆盖同名Object。 // 指定x-oss-forbid-overwrite为true时,表⽰禁⽌覆盖同名Object,如果同名Object已存在,程序将报错。 der("x-oss-forbid-overwrite", "false"); String objectName = filedir + fileName; //上传⽂件 ect(bucketName, objectName, instream, objectMetadata); // 封装 url 路径 String url = "" + bucketName + "." + endpoint + "/" + objectName; ret = url; } catch (IOException e) { (sage(), e); } finally { wn(); try { if (instream != null) { (); } } catch (IOException e) { tackTrace(); } } return ret; } /** * 判断⽂件是否存在。doesObjectExist还有⼀个参数isOnlyInOSS, * 如果为true则忽略302重定向或镜像;如果为false,则考虑302重定向或镜像。 * yourObjectName 表⽰上传⽂件到OSS时需要指定包含⽂件后缀在内的完整路径,例如abc/efg/。 * * @return 存在返回true */ public boolean doesObjectExist(String objectName) { boolean exists = jectExist(bucketName, filedir + objectName); return exists; } /** * 判断Bucket是否存在 * * @return 存在返回true */ public boolean doesBucketExist() { boolean exists = cketExist(bucketName); return exists; } /** * 创建Bucket */ public void createBucket() { CreateBucketRequest createBucketRequest = new CreateBucketRequest(bucketName); // 设置bucket权限为公共读,默认是私有读写 nedACL(Read); // 设置bucket存储类型为低频访问类型,默认是标准类型 rageClass(); boolean exists = cketExist(bucketName); if (!exists) { try { Bucket(createBucketRequest); // 关闭client wn(); } catch (Exception e) { (sage()); } } } /** * Description: 判断OSS服务⽂件上传时⽂件的contentType * * @param FilenameExtension ⽂件后缀 * @return String */ public static String getcontentType(String FilenameExtension) { if (".bmp".equalsIgnoreCase(FilenameExtension)) { return "image/bmp"; } if (".gif".equalsIgnoreCase(FilenameExtension)) { return "image/gif"; } if (".jpeg".equalsIgnoreCase(FilenameExtension) || ".jpg".equalsIgnoreCase(FilenameExtension) || ".png".equalsIgnoreCase(FilenameExtension)) { return "image/jpg"; } if (".html".equalsIgnoreCase(FilenameExtension)) { return "text/html"; } if (".txt".equalsIgnoreCase(FilenameExtension)) { return "text/plain"; } if (".vsd".equalsIgnoreCase(FilenameExtension)) { return "application/"; } if (".ppt".equalsIgnoreCase(FilenameExtension) || "pptx".equalsIgnoreCase(FilenameExtension)) { return "application/-powerpoint"; } if (".doc".equalsIgnoreCase(FilenameExtension) || "docx".equalsIgnoreCase(FilenameExtension)) { return "application/msword"; } if (".xml".equalsIgnoreCase(FilenameExtension)) { return "text/xml"; } if (".mp4".equalsIgnoreCase(FilenameExtension)) { return "video/mp4"; } if (".mp3".equalsIgnoreCase(FilenameExtension)) { return "audio/mp3"; } return "text/html"; } /** * @Description: 根据⽂件路径获取InputStream流 */ public InputStream getInputStreamByFileUrl(String fileName) { // ossObject包含⽂件所在的存储空间名称、⽂件名称、⽂件元信息以及⼀个输⼊流。 OSSObject ossObject = ect(bucketName, fileName); return ectContent(); }}第三步:上传下载⽂件public class FlightFileController { @ResponseBody @PostMapping("/upload") public Response upload(@RequestParam("file") MultipartFile file) { String filename = ource().getFilename(); //⽂件名 String pattern = "yyyy-MM-dd"; String dir = (new Date(), pattern); String name = ""; if (getFileType(filename) == 0) { name = ue() + "/" + dir + "/" + filename; } else { name = ue() + "/" + dir + "/" + filename; } InputStream inputStream = null; try { inputStream = utStream(); } catch (IOException e) { tackTrace(); ("上传失败"); } AliOssCloudUtil util = new AliOssCloudUtil(); //上传成功返回可直接查看⽂件的url String url = File2OSS(inputStream, name); return s(url); } public int getFileType(String fileName) { int i = 0; FileNameMap fileNameMap = eNameMap(); String contentTypeFor = tentTypeFor(fileName); //下⾯是进⼀判断是视频和图⽚的区别 if (contentTypeFor != null) {// 当为图⽚时不为空,是视频时为空 i = 1; } return i; } @PostMapping("/downLoad") public void downloadFile(String fileName, HttpServletResponse response) { try { AliOssCloudUtil ossClientUtil = new AliOssCloudUtil(); InputStream is = utStreamByFileUrl(edir() + fileName); // 配置⽂件下载 der("content-type", "application/octet-stream"); tentType("application/octet-stream"); // 下载⽂件能正常显⽰中⽂ der("Content-Disposition", "attachment;filename=" + (fileName, "UTF-8")); OutputStream os = putStream(); byte[] b = new byte[1024]; int len = -1; while ((len = (b)) != -1) { (b, 0, len); } (); (); } catch (Exception e) { tackTrace(); } }}  

发布者:admin,转转请注明出处:http://www.yc00.com/web/1688384429a130000.html

相关推荐

发表回复

评论列表(0条)

  • 暂无评论

联系我们

400-800-8888

在线咨询: QQ交谈

邮件:admin@example.com

工作时间:周一至周五,9:30-18:30,节假日休息

关注微信