| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184 |
- package com.qlm.oss;
- import cn.hutool.core.date.DateUtil;
- import com.aliyun.oss.OSS;
- import com.aliyun.oss.OSSClientBuilder;
- import com.aliyun.oss.model.PutObjectRequest;
- import com.jfinal.kit.LogKit;
- import com.jfinal.upload.UploadFile;
- import java.io.File;
- import java.io.InputStream;
- import java.util.Date;
- import java.util.UUID;
- /**
- * @program: yunpingtai
- * @ClassName: OssUtil
- * @description: TODO
- * @author: 吴英健
- * @create: 2025-07-09 10:50
- * @Version 1.0
- **/
- public class OssUtil {
- /**
- * 上传文件到OSS
- * @param uploadFile JFinal上传的文件对象
- * @param folder OSS上的文件夹路径,如 "images/"
- * @return 上传后的完整URL
- * @throws RuntimeException 上传失败时抛出异常
- */
- public static String upload(UploadFile uploadFile) {
- // 验证文件
- validateFile(uploadFile);
- File file = uploadFile.getFile();
- String originalFilename = uploadFile.getOriginalFileName();
- String fileExt = originalFilename.substring(originalFilename.lastIndexOf(".")).toLowerCase();
- // 生成新的文件名
- String newFileName = UUID.randomUUID().toString().replace("-", "") + fileExt;
- // OSS文件路径
- String ossPath = OssConfig.MKDIR + DateUtil.format(new Date(), "yyyyMMdd") + "/" + newFileName;
- // 创建OSS客户端
- OSS ossClient = new OSSClientBuilder().build(
- OssConfig.ENDPOINT,
- OssConfig.ACCESS_KEY_ID,
- OssConfig.ACCESS_KEY_SECRET
- );
- try {
- // 上传文件
- PutObjectRequest putObjectRequest = new PutObjectRequest(
- OssConfig.BUCKET_NAME,
- ossPath,
- file
- );
- ossClient.putObject(putObjectRequest);
- // 返回完整URL
- return OssConfig.DOMAIN + "/" + ossPath;
- } catch (Exception e) {
- LogKit.error("OSS文件上传失败", e);
- throw new RuntimeException("文件上传失败: " + e.getMessage());
- } finally {
- // 关闭OSS客户端
- if (ossClient != null) {
- ossClient.shutdown();
- }
- // 删除临时文件
- if (file != null && file.exists()) {
- file.delete();
- }
- }
- }
- /**
- * 通过InputStream上传文件到OSS
- * @param inputStream 文件输入流
- * @param filename 文件名
- * @return 上传后的完整URL
- * @throws RuntimeException 上传失败时抛出异常
- */
- public static String upload(InputStream inputStream, String filename) {
- // 验证文件名
- if (filename == null || filename.isEmpty()) {
- throw new RuntimeException("文件名不能为空");
- }
- String fileExt = filename.substring(filename.lastIndexOf(".")).toLowerCase();
- // 验证文件类型
- boolean allowed = false;
- for (String ext : OssConfig.ALLOWED_TYPES) {
- if (ext.trim().equalsIgnoreCase(fileExt)) {
- allowed = true;
- break;
- }
- }
- if (!allowed) {
- throw new RuntimeException("不支持的文件类型,仅支持: " + String.join(", ", OssConfig.ALLOWED_TYPES));
- }
- //不是zip包的情况下
- String ossPath = "";
- if (!filename.endsWith(".zip")) {
- // 生成新的文件名
- String newFileName = UUID.randomUUID().toString().replace("-", "") + fileExt;
- // OSS文件路径
- ossPath = OssConfig.MKDIR + DateUtil.format(new Date(), "yyyyMMdd") + "/" + newFileName;
- }else {
- ossPath = OssConfig.MKDIR + DateUtil.format(new Date(), "yyyyMMdd") + "/" + filename;
- }
- // 创建OSS客户端
- OSS ossClient = new OSSClientBuilder().build(
- OssConfig.ENDPOINT,
- OssConfig.ACCESS_KEY_ID,
- OssConfig.ACCESS_KEY_SECRET
- );
- try {
- // 通过InputStream上传文件
- PutObjectRequest putObjectRequest = new PutObjectRequest(
- OssConfig.BUCKET_NAME,
- ossPath,
- inputStream
- );
- ossClient.putObject(putObjectRequest);
- // 返回完整URL
- return OssConfig.DOMAIN + "/" + ossPath;
- } catch (Exception e) {
- LogKit.error("OSS文件上传失败", e);
- throw new RuntimeException("文件上传失败: " + e.getMessage());
- } finally {
- // 关闭OSS客户端
- if (ossClient != null) {
- ossClient.shutdown();
- }
- // 关闭输入流
- if (inputStream != null) {
- try {
- inputStream.close();
- } catch (Exception e) {
- LogKit.error("关闭输入流失败", e);
- }
- }
- }
- }
- /**
- * 验证上传文件
- */
- private static void validateFile(UploadFile uploadFile) {
- if (uploadFile == null) {
- throw new RuntimeException("请选择要上传的文件");
- }
- String originalFilename = uploadFile.getOriginalFileName();
- if (originalFilename == null || originalFilename.isEmpty()) {
- throw new RuntimeException("文件名不能为空");
- }
- // 检查文件扩展名
- String fileExt = originalFilename.substring(originalFilename.lastIndexOf(".")).toLowerCase();
- boolean allowed = false;
- for (String ext : OssConfig.ALLOWED_TYPES) {
- if (ext.trim().equalsIgnoreCase(fileExt)) {
- allowed = true;
- break;
- }
- }
- if (!allowed) {
- throw new RuntimeException("不支持的文件类型,仅支持: " + String.join(", ", OssConfig.ALLOWED_TYPES));
- }
- // 检查文件大小
- File file = uploadFile.getFile();
- if (file.length() > OssConfig.MAX_SIZE) {
- throw new RuntimeException("文件大小不能超过 " + (OssConfig.MAX_SIZE / 1024 / 1024) + "MB");
- }
- }
- }
|