本文主要是介绍上传图片到aliyun oss 并获取返回url,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
摘自https://www.cnblogs.com/baizhanshi/p/5593431.html
以上传用户头像为例的单张图片上传
后台处理
Controller:
@RequestMapping(value = "/headImgUpload.json", method = RequestMethod.POST)@ResponseBodypublic Map<String, Object> headImgUpload(HttpServletRequest request,MultipartFile file) {Map<String, Object> value = new HashMap<String, Object>();value.put("success", true);value.put("errorCode", 0);value.put("errorMsg", "");try {String head = userService.updateHead(file, 4);//此处是调用上传服务接口,4是需要更新的userId 测试数据。value.put("data", head);} catch (IOException e) {e.printStackTrace();value.put("success", false);value.put("errorCode", 200);value.put("errorMsg", "图片上传失败");}return value;}
service:
@Autowired
private OSSClientUtil ossClient;@Overridepublic String updateHead(MultipartFile file, long userId) throws IOException{if (file == null || file.getSize() <= 0) {throw new ImgException("头像不能为空");}String name = ossClient.uploadImg2Oss(file);String imgUrl = ossClient.getImgUrl(name);userDao.updateHead(userId, imgUrl);//只是本地上传使用的return imgUrl;}
utils:
import java.io.*;
import java.net.URL;
import java.util.Date;
import java.util.Random;import com.fndsoft.bcis.exception.ImgException;
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文件类** @author YuanDuDu*/
public class OSSClientUtil {Log log = LogFactory.getLog(OSSClientUtil.class);// endpoint以杭州为例,其它region请按实际情况填写private String endpoint = "您的endpoint";// accessKeyprivate String accessKeyId = "您的accessKeyId";private String accessKeySecret = "您的accessKeySecret";//空间private String bucketName = "bcis";//文件存储目录private String filedir = "data/";private OSSClient ossClient;public OSSClientUtil() {ossClient = new OSSClient(endpoint, accessKeyId, accessKeySecret);}/*** 初始化*/public void init() {ossClient = new OSSClient(endpoint, accessKeyId, accessKeySecret);}/*** 销毁*/public void destory() {ossClient.shutdown();}/*** 上传图片** @param url*/public void uploadImg2Oss(String url) {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) {throw new ImgException("图片上传失败");}}public String uploadImg2Oss(MultipartFile file) {if (file.getSize() > 1024 * 1024) {throw new ImgException("上传图片大小不能超过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) {throw new ImgException("图片上传失败");}}/*** 获得图片路径** @param fileUrl* @return*/public String getImgUrl(String fileUrl) {if (!StringUtils.isEmpty(fileUrl)) {String[] split = fileUrl.split("/");return this.getUrl(this.filedir + split[split.length - 1]);}return null;}/*** 上传到OSS服务器 如果同名文件会覆盖服务器上的** @param instream 文件流* @param fileName 文件名称 包括后缀名* @return 出错返回"" ,唯一MD5数字签名*/public String uploadFile2OSS(InputStream instream, String fileName) {String ret = "";try {//创建上传Object的Metadata ObjectMetadata 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, filedir + 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;}/*** Description: 判断OSS服务文件上传时文件的contentType** @param FilenameExtension 文件后缀* @return String*/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";}/*** 获得url链接** @param key* @return*/public String getUrl(String key) {// 设置URL过期时间为10年 3600l* 1000*24*365*10Date expiration = new Date(new Date().getTime() + 3600l * 1000 * 24 * 365 * 10);// 生成URLURL url = ossClient.generatePresignedUrl(bucketName, key, expiration);if (url != null) {return url.toString();}return null;}
}
gradle:
compile 'com.aliyun.oss:aliyun-sdk-oss:2.2.3'
这篇关于上传图片到aliyun oss 并获取返回url的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!