/** * OSS文件上传 * @author songhj * */ public class OSSClientUtil { /** * 日志 */ private static final Logger SYS_JOB_LOGGER = LoggerFactory.getLogger("sys-job"); /** * 外网域名 */ private String endpoint; /** * 密钥Access Key ID */ private String accessKeyId; /** * 密钥Access Key Secret */ private String accessKeySecret; /** * bucket名称 */ private String bucketName; /** * 文件夹名称 */ private String path; /** * OSS对象 */ private OSSClient ossClient; /** * 初始化 * 获取阿里云OSS客户端对象 */ public OSSClientUtil() { endpoint = "http://oss-cn-shenzhen.aliyuncs.com"; accessKeyId = "LTA********vyAQw"; accessKeySecret = "6u2aCxq************PjBtvz2XwZi"; bucketName = "sz-tst"; path = "upload/" + CommUtil.formatTime("yyyyMM", new Date()) + "/"; ossClient = new OSSClient(endpoint, accessKeyId, accessKeySecret); } /** * 本地图片上传处理 * @param file * @return */ public InterfaceVo uploadImgOss(MultipartFile file) { InterfaceVo vo = new InterfaceVo(); if (file.getSize() > 2 * 1024 * 1024) { vo.setCodeEnum(-1, "上传图片大小不能超过2M!"); return vo; } Accessory accessory = new Accessory(); String originalFilename = file.getOriginalFilename(); String ext = originalFilename.substring(originalFilename.lastIndexOf(".")).toLowerCase(); String name = CommUtil.randomString(18); try { /** * 验证是否存在 */ while(true){ boolean isObjectExist = ossClient.doesObjectExist(bucketName, path + name + ext); if(isObjectExist){ name = CommUtil.randomString(18); }else{ break; } } InputStream inputStream = file.getInputStream(); String key = uploadFileOSS(inputStream, name + ext); if(CommUtil.isNotNull(key)){ accessory.setPath("/" + path); accessory.setName(name); accessory.setExt(ext); BufferedImage bis = ImageIO.read(inputStream); if(bis != null){ accessory.setWidth(bis.getWidth()); accessory.setHeight(bis.getHeight()); } accessory.setSize(file.getSize()); accessory.setCreateTime(new Date()); vo.setCodeEnum(Code.SUCCESS); vo.getOutData().put("obj", accessory); SYS_JOB_LOGGER.info("=======上传图片成功:" + path + name + ext); //关闭 ossClient.shutdown(); } } catch (Exception e) { SYS_JOB_LOGGER.error("========上传图片失败:" + e.getMessage()); vo.setCodeEnum(-1, "图片上传失败"); } return vo; } /** * 上传图片到阿里云OSS * @param instream * @param fileName * @return */ public String uploadFileOSS(InputStream instream, String fileName) { String ret = ""; try { //创建上传Object的Metadata ObjectMetadata metadata = new ObjectMetadata(); metadata.setContentLength(instream.available()); metadata.setCacheControl("no-cache"); metadata.setHeader("Pragma", "no-cache"); metadata.setContentType(getcontentType(fileName.substring(fileName.lastIndexOf(".")))); metadata.setContentDisposition("inline;filename=" + fileName); //上传文件 PutObjectResult putResult = ossClient.putObject(bucketName, path + fileName, instream, metadata); ret = putResult.getETag(); } catch (IOException e) { SYS_JOB_LOGGER.error(e.getMessage(), e); } finally { try { if (instream != null) { instream.close(); } } catch (IOException e) { e.printStackTrace(); } } return ret; } /** * 判断OSS服务文件上传时文件的contentType * @param FilenameExtension * @return */ public static String getcontentType(String FilenameExtension) { if (FilenameExtension.equalsIgnoreCase("bmp")) { return "image/bmp"; } if (FilenameExtension.equalsIgnoreCase("gif")) { return "image/gif"; } if (FilenameExtension.equalsIgnoreCase("jpeg") || FilenameExtension.equalsIgnoreCase("jpg") || FilenameExtension.equalsIgnoreCase("png")) { return "image/jpeg"; } if (FilenameExtension.equalsIgnoreCase("html")) { return "text/html"; } if (FilenameExtension.equalsIgnoreCase("txt")) { return "text/plain"; } if (FilenameExtension.equalsIgnoreCase("vsd")) { return "application/vnd.visio"; } if (FilenameExtension.equalsIgnoreCase("pptx") || FilenameExtension.equalsIgnoreCase("ppt")) { return "application/vnd.ms-powerpoint"; } if (FilenameExtension.equalsIgnoreCase("docx") || FilenameExtension.equalsIgnoreCase("doc")) { return "application/msword"; } if (FilenameExtension.equalsIgnoreCase("xml")) { return "text/xml"; } return "image/jpeg"; } /** * 创建文件夹 * 要创建的文件夹名称,在满足Object命名规则的情况下以"/"结尾 ,例如:images/ * @param client */ public void createFolder(String folderName) { /** * 这里的size为0,注意OSS本身没有文件夹的概念,这里创建的文件夹本质上是一个size为0的Object,dataStream仍然可以有数据 * 照样可以上传下载,只是控制台会对以"/"结尾的Object以文件夹的方式展示,用户可以利用这种方式来实现文件夹模拟功能,创建形式上的文件夹 */ ObjectMetadata objectMeta = new ObjectMetadata(); byte[] buffer = new byte[0]; ByteArrayInputStream in = new ByteArrayInputStream(buffer); objectMeta.setContentLength(0); ossClient.putObject(bucketName, folderName, in, objectMeta); } /** * 删除文件 * @param fileName */ public void deleteObject(String fileName) { boolean isObjectExist = ossClient.doesObjectExist(bucketName, fileName); if (isObjectExist) { SYS_JOB_LOGGER.info("====文件存在,可以删除"); ossClient.deleteObject(bucketName, fileName); } else { SYS_JOB_LOGGER.info("====文件不存在,无法删除!"); } } /** * 测试 * @param args */ public static void main(String[] args) { //初始化OSSClient // OSSClientUtil oSSClientUtil = new OSSClientUtil(); // oSSClientUtil.deleteObject("cps/upload/"); // oSSClientUtil.shutdown(); } }
阿里云OSS上传图片
猜你喜欢
转载自blog.csdn.net/haijun1993/article/details/80254888
今日推荐
周排行