当前位置 博文首页 > xzh_blog:阿里云OSS上传文件 工具类拿来直接用

    xzh_blog:阿里云OSS上传文件 工具类拿来直接用

    作者:[db:作者] 时间:2021-08-07 19:02

    准备:找运维创建存储空间Bucket,并获取账号信息endpoint、accessKeyId、secretAccessKey

    注意:上传文件的大小不超过5GB

    然后引入阿里OSS SDK坐标

            <!--oss-->
            <dependency>
                <groupId>com.aliyun.oss</groupId>
                <artifactId>aliyun-sdk-oss</artifactId>
                <version>3.8.0</version>
            </dependency>
    

    定义工具类

    import com.aliyun.oss.OSS;
    import com.aliyun.oss.OSSClientBuilder;
    import com.aliyun.oss.model.CannedAccessControlList;
    import com.bzcst.iot.provider.config.BusinessException;
    import lombok.extern.slf4j.Slf4j;
    import org.apache.commons.lang3.StringUtils;
    import org.springframework.web.multipart.MultipartFile;
    
    import java.io.InputStream;
    import java.time.LocalDate;
    import java.util.UUID;
    
    /**
     * 上传文件到阿里云OSS
     *
     * @author 向振华
     * @date 2021/05/12
     */
    @Slf4j
    public class AliOssUtils {
    
        private static final String endpoint = "xxx";
        private static final String accessKeyId = "xxx";
        private static final String secretAccessKey = "xxx";
        private static final String bucketName = "xxx";
        // 文件夹
        public static final String dirDefault = "default/";
        public static final String dirBusiness = "business/";
    
        public static String upload(MultipartFile file) {
            return uploadOss(dirDefault + getFileName(file), getInputStream(file));
        }
    
        public static String upload(String dir, MultipartFile file) {
            return uploadOss(dir + getFileName(file), getInputStream(file));
        }
    
        public static String upload(String dir, String fileName, InputStream is) {
            return uploadOss(dir + fileName, is);
        }
    
        private static String uploadOss(String key, InputStream is) {
            OSS ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, secretAccessKey);
            try {
                // 上传文件
                ossClient.putObject(bucketName, key, is);
                // 访问权限(如果不设置,则继承bucket权限)
                ossClient.setObjectAcl(bucketName, key, CannedAccessControlList.PublicRead);
            } catch (Exception e) {
                log.error("uploadOss Exception", e);
                return null;
            } finally {
                ossClient.shutdown();
            }
            // 返回图片URL
            return String.format("https://%s.%s/%s", bucketName, endpoint, key);
        }
    
        private static InputStream getInputStream(MultipartFile file) {
            try {
                return file.getInputStream();
            } catch (Exception e) {
                log.error("getInputStream Exception", e);
                throw new BusinessException("文件流获取失败");
            }
        }
    
        private static String getFileName(MultipartFile file) {
            String fileType = null;
            String originalFilename = file.getOriginalFilename();
            if (StringUtils.isNotBlank(originalFilename)) {
                fileType = originalFilename.substring(originalFilename.lastIndexOf('.'));
            }
            return getFileName() + fileType;
        }
    
        private static String getFileName() {
            String uuid = UUID.randomUUID().toString().replace("-", "");
            String now = LocalDate.now().toString().replace("-", "");
            return now + uuid;
        }
    }
    
    

    又改造了一下

    public class AliOssUtils {
    
        private String endpoint = "xxx";
        private String accessKeyId = "xxx";
        private String secretAccessKey = "xxx";
        
        public String ossFileUpload(MultipartFile file, String bucketName, String dir) {
            OSS ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, secretAccessKey);
            String key = getKey(file, dir);
            try {
                ossClient.putObject(bucketName, key, file.getInputStream());
            } catch (Exception e) {
                log.error("ossFileUpload Exception", e);
                return null;
            } finally {
                ossClient.shutdown();
            }
            return String.format("https://%s.%s/%s", bucketName, endpoint, key);
        }
    
        private String getKey(MultipartFile file, String dir) {
            return StringUtils.isBlank(dir) ? "default/" : dir + getFileName(file);
        }
    
        private static String getFileName(MultipartFile file) {
            String fileType = null;
            String originalFilename = file.getOriginalFilename();
            if (StringUtils.isNotBlank(originalFilename)) {
                fileType = originalFilename.substring(originalFilename.lastIndexOf('.'));
            }
            String uuid = UUID.randomUUID().toString().replace("-", "");
            String now = LocalDate.now().toString().replace("-", "");
            return uuid + now + fileType;
        }
    }

    ?

    cs
    下一篇:没有了