java.io.*
; import java.net.URL; import java.util.Date; import java.util.Random; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import com.aliyun.oss.OSSClient; import com.aliyun.oss.model.ObjectMetadata; import com.aliyun.oss.model.PutObjectResult; import org.springframework.util.StringUtils; import org.springframework.web.multipart.MultipartFile; /** * 阿里云 OSS文件类 参考文档 https://help.aliyun.com/product/31815.html?spm=5176.750001.2.8.SZvzsM * * @author sunzhenyang */publicclass OssClienUtils { Log log= LogFactory.getLog(OssClienUtils.
class); // endpoint以北京为例,其它region请按实际情况填写privateString endpoint = "http://oss-cn-beijing.aliyuncs.com"
; // accessKey和accessKeySecret 为购买阿里云服务时官方提供privateString accessKeyId = "LTAIuB5R5******"
; privateString accessKeySecret = "56DOZQ2yRPE8n*****"
; //空间privateString bucketName = "image"
; //文件存储目录 (上传时在key前面加上目录 默认创建)privateString date = "img/"
; private OSSClient ossClient; public OssClienUtils() { ossClient=
new OSSClient(endpoint, accessKeyId, accessKeySecret); } /** * 销毁 */publicvoid destory() { ossClient.shutdown(); } /** * 上传图片 直接获取本地资源路径 * * @param url * @throws Exception */publicvoiduploadImg2Oss(String url)
throws Exception { File fileOnServer=
new File(url); FileInputStream fin; try { fin=
new FileInputStream(fileOnServer); String[] split= url.split("/"
); this.uploadFile2OSS(fin, split[split.length - 1
]); } catch (FileNotFoundException e) { thrownewException("图片上传失败"
); } } /** * 上传图片 * @param file * @return key 可根据key获取上到到服务器的志愿和删除等操作 * @throws Exception */publicString uploadImg2Oss(MultipartFile file,String typeDate)
throws Exception { this.date=
typeDate; // if (file.getSize() > 1024 * 1024) { // throw new Exception("上传图片大小不能超过1M!"); // }String originalFilename =
file.getOriginalFilename(); String substring= originalFilename.substring(originalFilename.lastIndexOf("."
)).toLowerCase(); Random random=
new Random(); String name= random.nextInt(10000) + System.currentTimeMillis() +
substring; try { InputStream inputStream=
file.getInputStream(); this.uploadFile2OSS(inputStream, name); return name; } catch (Exception e) { thrownewException("图片上传失败"
); } } /** * 上传到OSS服务器 如果同名文件会覆盖服务器上的 * * @param instream 文件流 * @param fileName 文件名称 包括后缀名 * @return 出错返回"" ,唯一MD5数字签名 */public String uploadFile2OSS(InputStream instream, String fileName) { String ret= ""
; try { //创建上传Object的MetadataObjectMetadata objectMetadata =
new ObjectMetadata(); objectMetadata.setContentLength(instream.available()); objectMetadata.setCacheControl("no-cache"
); objectMetadata.setHeader("Pragma", "no-cache"
); objectMetadata.setContentType(getcontentType(fileName.substring(fileName.lastIndexOf("."
)))); objectMetadata.setContentDisposition("inline;filename=" +
fileName); //上传文件PutObjectResult putResult = ossClient.putObject(bucketName, date +
fileName, instream, objectMetadata); ret=
putResult.getETag(); } catch (IOException e) { log.error(e.getMessage(), e); } finally { try { if(instream !=
null) { instream.close(); } } catch (IOException e) { e.printStackTrace(); } } return ret; } /** * 获得图片路径 * * @param fileUrl * @return*/public String getImgUrl(String fileUrl) { if(!
StringUtils.isEmpty(fileUrl)) { String[] split= fileUrl.split("/"
); returnthis.getUrl(
this.date + split[split.length - 1
]); } returnnull; } /** * Description: 判断OSS服务文件上传时文件的contentType * * @param FilenameExtension 文件后缀 * @return String */publicstatic 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"
; } /** * 获得url链接 * * @param key * @return*/public String getUrl(String key) { // 设置URL过期时间为10年 3600l* 1000*24*365*10Date expiration =
newDate(
newDate().getTime() + 3600l * 1000 * 24 * 365 * 10
); // 生成URLURL url =
ossClient.generatePresignedUrl(bucketName, key, expiration); if(url !=
null) { return url.toString(); } returnnull; } /** * 删除单个文件 */publicvoid delFile(String key){ ossClient.deleteObject(bucketName, key); } }来源: http://www.bubuko.com/infodetail-2011903.html