一、准备工作
开发工具idea,jdk1.8,测试工具 postman 注册阿里云服务器并创建oss储存库,
创建Spring boot空项目

二、
引入pom.xml

org.springframework.boot            spring-boot-starter-web        com.aliyun.oss            aliyun-sdk-oss            2.8.1com.alibaba            fastjson            1.2.41

三、
1.在配置文件中application.yml配置oss的仓库名和访问路径前缀
bucket为仓库名
preUrl为访问前缀
咱们没有配置端口所以默认端口8080




spring boot 获取服务器请求地址 springboot获取服务器文件_spring


2.创建config.properties
endpoint为阿里云地址
accessKeyId为OSS的K
accessKeySecret为OSS的V
注意:生成K,V之后注意保存,因为这个accessKeySecret只显示一次,最好下载保存一下,以免忘记


spring boot 获取服务器请求地址 springboot获取服务器文件_spring_02


四、引入我写好的Util
1.JsonResult 封装好的返回类型

package com.file.util;import java.util.HashMap;import java.util.List;import java.util.Map;import org.apache.commons.beanutils.BeanMap;import com.alibaba.fastjson.JSON;import com.alibaba.fastjson.JSONObject;import com.alibaba.fastjson.TypeReference;public class JsonResult {public static Map RetJsonPage(int code, String msg, Object data, String[] field) {Map RetMap = new HashMap<>();RetMap.put("code", code);RetMap.put("msg", msg);if (null == data) {RetMap.put("data", "");} else {RetMap.put("data", FilterMap(data, field));// RetMap.put("data", data);}return RetMap;}private static Map FilterMap(Object data, String[] field) {String[] arr = { "pageNum", "pageSize", "total", "list", "pages" };Map RetMap = new HashMap<>();Map datamap = new BeanMap(data);if (null == field || field.length == 0) {field = arr;}for (int i = 0; i < arr.length; i++) {String key = arr[i];RetMap.put(key, datamap.get(key));}return RetMap;}public static Map RetJsone(int code, String msg, Object data) {Map RetMap = new HashMap<>();RetMap.put("code", code);RetMap.put("msg", msg);RetMap.put("data", data);return RetMap;}public static Object GetJsonVal(String str, String key) {Map mapTypes = JSON.parseObject(str);Map map = new HashMap();return ((JSONObject) mapTypes).getString(key);}public static List> GetJsonList(String str) {List> retmap = JSON.parseObject(str, new TypeReference>>() {});return retmap;}}

2.ResultCode 封装好的返回状态码

package com.file.util;public class ResultCode {/** 成功 */public static final int SUCCESS = 200; // "成功"/** 没有登录 */public static final int NOT_LOGIN = 400; // 没有登录"),/** 发生异常 */public static final int EXCEPTION = 401; // 发生异常"),/** 系统错误 */public static final int SYS_ERROR = 402; // 系统错误"),/** 参数错误 */public static final int PARAMS_ERROR = 403; // 参数错误 "),/** 不支持或已经废弃 */public static final int NOT_SUPPORTED = 410; // 不支持或已经废弃"),/** AuthCode错误 */public static final int INVALID_AUTHCODE = 444; // 无效的AuthCode"),/** 太频繁的调用 */public static final int TOO_FREQUENT = 445; // 太频繁的调用"),/** 未知的错误 */public static final int UNKNOWN_ERROR = 499; // 未知错误");public static final int BALANCE_NOT_ENOUGH = 601;/** 操作有误 */public static final int WRONG_OPERATION = 602;/** 文件过大 */public static final int FILE_TOO_LARGE = 604;/** 结果为空 */public static final int RES_NULL = 700; // 结果为空 ");/** code没有绑定活动 */public static final int ACT_NULL = 701; // code没有绑定活动 ");/** 更新失败 */public static final int UPDATE_FAIL = 702; // 更新失败 ");/** 接口限制 */public static final int API_LIMIT = 703; // 更新失败 ");/** 失败 */public static final int FAIL = 704; // 失败 ");}

3.封装好的OssUtil

package com.file.util;import org.springframework.web.multipart.MultipartFile;import java.io.ByteArrayInputStream;import java.io.ByteArrayOutputStream;import java.io.IOException;import java.io.InputStream;import java.math.BigInteger;import java.security.MessageDigest;/** * 每个用户一个目录保存文件, 以md5为文件名保存文件避免用户上传重复文件 *  * @author ChenPantao * @date 2017年12月15日 */public class OssUtil {        public static String getIMGS(MultipartFile[] IMG_imgs , Long userid, String bucketName){        String imgs = "";        for(int i = 0 ;i

4.用于请求阿里云服务器的Oss

package com.file.util;import java.io.ByteArrayInputStream;import java.io.File;import java.io.FileInputStream;import java.io.InputStream;import java.util.PropertyResourceBundle;import java.util.ResourceBundle;import org.slf4j.Logger;import org.slf4j.LoggerFactory;import org.springframework.web.multipart.MultipartFile;import com.aliyun.oss.OSSClient;import com.aliyun.oss.model.Bucket;import com.aliyun.oss.model.OSSObject;import com.aliyun.oss.model.ObjectMetadata;import com.aliyun.oss.model.PutObjectResult;public class Oss {private static final Logger LOG = LoggerFactory.getLogger(Oss.class);private static String ENDPOINT;private static String ACCESS_KEY_ID;private static String ACCESS_KEY_SECRET;// init static datasstatic {ResourceBundle bundle = PropertyResourceBundle.getBundle("config");ENDPOINT = bundle.containsKey("endpoint") == false ? "" : bundle.getString("endpoint");ACCESS_KEY_ID = bundle.containsKey("accessKeyId") == false ? "" : bundle.getString("accessKeyId");ACCESS_KEY_SECRET = bundle.containsKey("accessKeySecret") == false ? "" : bundle.getString("accessKeySecret");}private static final OSSClient getOSSClient() {return new OSSClient(ENDPOINT, ACCESS_KEY_ID, ACCESS_KEY_SECRET);}public static final boolean createBucket(String bucketName) {Bucket bucket = getOSSClient().createBucket(bucketName);return bucketName.equals(bucket.getName());}public static final void deleteBucket(String bucketName) {getOSSClient().deleteBucket(bucketName);LOG.info("删除" + bucketName + "Bucket成功");}public static final String uploadObject2OSS(File file, String bucketName, String diskName) {String resultStr = null;try {InputStream is = new FileInputStream(file);String fileName = file.getName();Long fileSize = file.length();ObjectMetadata metadata = new ObjectMetadata();metadata.setContentLength(is.available());metadata.setCacheControl("no-cache");metadata.setHeader("Pragma", "no-cache");metadata.setContentEncoding("utf-8");metadata.setContentType(getContentType(fileName));metadata.setContentDisposition("filename/filesize=" + fileName + "/" + fileSize + "Byte.");// 上传文件PutObjectResult putResult = getOSSClient().putObject(bucketName, diskName + fileName, is, metadata);// 解析结果resultStr = putResult.getETag();} catch (Exception e) {LOG.error("上传阿里云OSS服务器异常." + e.getMessage(), e);}return resultStr;}public static final String uploadObject2OSS2(MultipartFile file, String bucketName, String diskName,String fileName) {String resultStr = null;try {InputStream is = file.getInputStream();ObjectMetadata metadata = new ObjectMetadata();metadata.setContentLength(is.available());metadata.setCacheControl("no-cache");metadata.setHeader("Pragma", "no-cache");metadata.setContentEncoding("utf-8");metadata.setContentType(getContentType(fileName));// 上传文件PutObjectResult putResult = getOSSClient().putObject(bucketName, diskName + fileName, is, metadata);// 解析结果resultStr = putResult.getETag();} catch (Exception e) {LOG.error("上传阿里云OSS服务器异常." + e.getMessage(), e);}return resultStr;}public static final String uploadString2OSS(String str, String fileName, String bucketName, String diskName) {String resultStr = null;try {byte[] content = str.getBytes();ObjectMetadata metadata = new ObjectMetadata();metadata.setContentLength(content.length);metadata.setCacheControl("no-cache");metadata.setHeader("Pragma", "no-cache");metadata.setContentEncoding("utf-8");metadata.setContentType(getContentType(fileName));metadata.setContentDisposition("filename/filesize=" + fileName + "/" + content.length + "Byte.");// 上传文件PutObjectResult putResult = getOSSClient().putObject(bucketName, diskName + fileName,new ByteArrayInputStream(content), metadata);// 解析结果resultStr = putResult.getETag();} catch (Exception e) {LOG.error("上传阿里云OSS服务器异常." + e.getMessage(), e);}return resultStr;}public static final String uploadObject2OSS(InputStream is, String fileName, Long fileSize, String bucketName,String diskName) {// 获取ossClientOSSClient ossClient = getOSSClient();try {// 生成OSS中Object的元数据ObjectMetadata metadata = new ObjectMetadata();metadata.setContentLength(is.available());metadata.setCacheControl("no-cache");metadata.setHeader("Pragma", "no-cache");metadata.setContentEncoding("utf-8");metadata.setContentType(getContentType(fileName));metadata.setContentDisposition("filename/filesize=" + fileName + "/" + fileSize + "Byte.");// 上传文件PutObjectResult putResult = ossClient.putObject(bucketName, diskName + fileName, is, metadata);// 解析结果return putResult.getETag();} catch (Exception e) {LOG.error("上传阿里云OSS服务器异常." + e.getMessage(), e);throw new RuntimeException("上传文件失败");} finally {ossClient.shutdown();}}public static final InputStream getOSS2InputStream(String bucketName, String diskName, String key) {OSSObject ossObj = getOSSClient().getObject(bucketName, diskName + key);return ossObj.getObjectContent();}public static void deleteFile(String bucketName, String diskName, String key) {getOSSClient().deleteObject(bucketName, diskName + key);LOG.info("删除" + bucketName + "下的文件" + diskName + key + "成功");}public static final String getContentType(String fileName) {String fileExtension = fileName.substring(fileName.lastIndexOf(".") + 1);if ("bmp".equalsIgnoreCase(fileExtension))return "image/bmp";if ("gif".equalsIgnoreCase(fileExtension))return "image/gif";if ("jpeg".equalsIgnoreCase(fileExtension) || "jpg".equalsIgnoreCase(fileExtension)|| "png".equalsIgnoreCase(fileExtension))return "image/jpeg";if ("html".equalsIgnoreCase(fileExtension))return "text/html";if ("txt".equalsIgnoreCase(fileExtension))return "text/plain";if ("vsd".equalsIgnoreCase(fileExtension))return "application/vnd.visio";if ("ppt".equalsIgnoreCase(fileExtension) || "pptx".equalsIgnoreCase(fileExtension))return "application/vnd.ms-powerpoint";if ("doc".equalsIgnoreCase(fileExtension) || "docx".equalsIgnoreCase(fileExtension))return "application/msword";if ("xml".equalsIgnoreCase(fileExtension))return "text/xml";return "text/html";}}

五、FileController 上传接口

package com.file.controller;import com.file.util.JsonResult;import com.file.util.OssUtil;import com.file.util.ResultCode;import org.springframework.beans.factory.annotation.Value;import org.springframework.web.bind.annotation.PostMapping;import org.springframework.web.bind.annotation.RequestMapping;import org.springframework.web.bind.annotation.RequestParam;import org.springframework.web.bind.annotation.RestController;import org.springframework.web.multipart.MultipartFile;import java.util.Map;@RestController@RequestMapping("/file")public class FileController {//@Autowired//private OSSConfig oSSConfig;@Value("${oss.bucket}")private String bucket;@Value("${oss.preUrl}")private String preUrl;//@ApiOperation(value = "上传单个文件")@PostMapping("/singleFile")public Map uploadFile(@RequestParam MultipartFile IMG_gicon) {String gicon = OssUtil.uploadFile(IMG_gicon, 55555L,bucket);String url = preUrl+gicon;return JsonResult.RetJsone(ResultCode.SUCCESS, "上传成功", url);}// @ApiOperation(value = "上传多个文件")@PostMapping("/multipartFiles")public Map uploadFiles( @RequestParam MultipartFile[] IMG_gicons) {String gimg = OssUtil.getIMGS(IMG_gicons, 55555L, bucket);return JsonResult.RetJsone(ResultCode.SUCCESS, "多文件上传成功", gimg);}}

Spring Boot整合阿里OSS文件储存服务器详细教程,附源码!


spring boot 获取服务器请求地址 springboot获取服务器文件_java_03


程序猿不秃头 2020-06-09 15:12:23


spring boot 获取服务器请求地址 springboot获取服务器文件_bundle_04


181


spring boot 获取服务器请求地址 springboot获取服务器文件_spring_05


收藏 2

分类专栏: java Spring boot 阿里云OSS

编辑 版权

一、准备工作
开发工具idea,jdk1.8,测试工具 postman 注册阿里云服务器并创建oss储存库,
创建Spring boot空项目
二、
引入pom.xml

org.springframework.boot            spring-boot-starter-web        com.aliyun.oss            aliyun-sdk-oss            2.8.1com.alibaba            fastjson            1.2.411234567891011121314

三、
1.在配置文件中application.yml配置oss的仓库名和访问路径前缀
bucket为仓库名
preUrl为访问前缀
咱们没有配置端口所以默认端口8080


spring boot 获取服务器请求地址 springboot获取服务器文件_bundle_06


2.创建config.properties
endpoint为阿里云地址
accessKeyId为OSS的K
accessKeySecret为OSS的V
注意:生成K,V之后注意保存,因为这个accessKeySecret只显示一次,最好下载保存一下,以免忘记


spring boot 获取服务器请求地址 springboot获取服务器文件_bundle_07


四、引入我写好的Util
1.JsonResult 封装好的返回类型

package com.file.util;import java.util.HashMap;import java.util.List;import java.util.Map;import org.apache.commons.beanutils.BeanMap;import com.alibaba.fastjson.JSON;import com.alibaba.fastjson.JSONObject;import com.alibaba.fastjson.TypeReference;public class JsonResult {public static Map RetJsonPage(int code, String msg, Object data, String[] field) {Map RetMap = new HashMap<>();RetMap.put("code", code);RetMap.put("msg", msg);if (null == data) {RetMap.put("data", "");} else {RetMap.put("data", FilterMap(data, field));// RetMap.put("data", data);}return RetMap;}private static Map FilterMap(Object data, String[] field) {String[] arr = { "pageNum", "pageSize", "total", "list", "pages" };Map RetMap = new HashMap<>();Map datamap = new BeanMap(data);if (null == field || field.length == 0) {field = arr;}for (int i = 0; i < arr.length; i++) {String key = arr[i];RetMap.put(key, datamap.get(key));}return RetMap;}public static Map RetJsone(int code, String msg, Object data) {Map RetMap = new HashMap<>();RetMap.put("code", code);RetMap.put("msg", msg);RetMap.put("data", data);return RetMap;}public static Object GetJsonVal(String str, String key) {Map mapTypes = JSON.parseObject(str);Map map = new HashMap();return ((JSONObject) mapTypes).getString(key);}public static List> GetJsonList(String str) {List> retmap = JSON.parseObject(str, new TypeReference>>() {});return retmap;}}123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475

2.ResultCode 封装好的返回状态码

package com.file.util;public class ResultCode {/** 成功 */public static final int SUCCESS = 200; // "成功"/** 没有登录 */public static final int NOT_LOGIN = 400; // 没有登录"),/** 发生异常 */public static final int EXCEPTION = 401; // 发生异常"),/** 系统错误 */public static final int SYS_ERROR = 402; // 系统错误"),/** 参数错误 */public static final int PARAMS_ERROR = 403; // 参数错误 "),/** 不支持或已经废弃 */public static final int NOT_SUPPORTED = 410; // 不支持或已经废弃"),/** AuthCode错误 */public static final int INVALID_AUTHCODE = 444; // 无效的AuthCode"),/** 太频繁的调用 */public static final int TOO_FREQUENT = 445; // 太频繁的调用"),/** 未知的错误 */public static final int UNKNOWN_ERROR = 499; // 未知错误");public static final int BALANCE_NOT_ENOUGH = 601;/** 操作有误 */public static final int WRONG_OPERATION = 602;/** 文件过大 */public static final int FILE_TOO_LARGE = 604;/** 结果为空 */public static final int RES_NULL = 700; // 结果为空 ");/** code没有绑定活动 */public static final int ACT_NULL = 701; // code没有绑定活动 ");/** 更新失败 */public static final int UPDATE_FAIL = 702; // 更新失败 ");/** 接口限制 */public static final int API_LIMIT = 703; // 更新失败 ");/** 失败 */public static final int FAIL = 704; // 失败 ");}12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455

3.封装好的OssUtil

package com.file.util;import org.springframework.web.multipart.MultipartFile;import java.io.ByteArrayInputStream;import java.io.ByteArrayOutputStream;import java.io.IOException;import java.io.InputStream;import java.math.BigInteger;import java.security.MessageDigest;/** * 每个用户一个目录保存文件, 以md5为文件名保存文件避免用户上传重复文件 *  * @author ChenPantao * @date 2017年12月15日 */public class OssUtil {        public static String getIMGS(MultipartFile[] IMG_imgs , Long userid, String bucketName){        String imgs = "";        for(int i = 0 ;i

4.用于请求阿里云服务器的Oss

package com.file.util;import java.io.ByteArrayInputStream;import java.io.File;import java.io.FileInputStream;import java.io.InputStream;import java.util.PropertyResourceBundle;import java.util.ResourceBundle;import org.slf4j.Logger;import org.slf4j.LoggerFactory;import org.springframework.web.multipart.MultipartFile;import com.aliyun.oss.OSSClient;import com.aliyun.oss.model.Bucket;import com.aliyun.oss.model.OSSObject;import com.aliyun.oss.model.ObjectMetadata;import com.aliyun.oss.model.PutObjectResult;public class Oss {private static final Logger LOG = LoggerFactory.getLogger(Oss.class);private static String ENDPOINT;private static String ACCESS_KEY_ID;private static String ACCESS_KEY_SECRET;// init static datasstatic {ResourceBundle bundle = PropertyResourceBundle.getBundle("config");ENDPOINT = bundle.containsKey("endpoint") == false ? "" : bundle.getString("endpoint");ACCESS_KEY_ID = bundle.containsKey("accessKeyId") == false ? "" : bundle.getString("accessKeyId");ACCESS_KEY_SECRET = bundle.containsKey("accessKeySecret") == false ? "" : bundle.getString("accessKeySecret");}private static final OSSClient getOSSClient() {return new OSSClient(ENDPOINT, ACCESS_KEY_ID, ACCESS_KEY_SECRET);}public static final boolean createBucket(String bucketName) {Bucket bucket = getOSSClient().createBucket(bucketName);return bucketName.equals(bucket.getName());}public static final void deleteBucket(String bucketName) {getOSSClient().deleteBucket(bucketName);LOG.info("删除" + bucketName + "Bucket成功");}public static final String uploadObject2OSS(File file, String bucketName, String diskName) {String resultStr = null;try {InputStream is = new FileInputStream(file);String fileName = file.getName();Long fileSize = file.length();ObjectMetadata metadata = new ObjectMetadata();metadata.setContentLength(is.available());metadata.setCacheControl("no-cache");metadata.setHeader("Pragma", "no-cache");metadata.setContentEncoding("utf-8");metadata.setContentType(getContentType(fileName));metadata.setContentDisposition("filename/filesize=" + fileName + "/" + fileSize + "Byte.");// 上传文件PutObjectResult putResult = getOSSClient().putObject(bucketName, diskName + fileName, is, metadata);// 解析结果resultStr = putResult.getETag();} catch (Exception e) {LOG.error("上传阿里云OSS服务器异常." + e.getMessage(), e);}return resultStr;}public static final String uploadObject2OSS2(MultipartFile file, String bucketName, String diskName,String fileName) {String resultStr = null;try {InputStream is = file.getInputStream();ObjectMetadata metadata = new ObjectMetadata();metadata.setContentLength(is.available());metadata.setCacheControl("no-cache");metadata.setHeader("Pragma", "no-cache");metadata.setContentEncoding("utf-8");metadata.setContentType(getContentType(fileName));// 上传文件PutObjectResult putResult = getOSSClient().putObject(bucketName, diskName + fileName, is, metadata);// 解析结果resultStr = putResult.getETag();} catch (Exception e) {LOG.error("上传阿里云OSS服务器异常." + e.getMessage(), e);}return resultStr;}public static final String uploadString2OSS(String str, String fileName, String bucketName, String diskName) {String resultStr = null;try {byte[] content = str.getBytes();ObjectMetadata metadata = new ObjectMetadata();metadata.setContentLength(content.length);metadata.setCacheControl("no-cache");metadata.setHeader("Pragma", "no-cache");metadata.setContentEncoding("utf-8");metadata.setContentType(getContentType(fileName));metadata.setContentDisposition("filename/filesize=" + fileName + "/" + content.length + "Byte.");// 上传文件PutObjectResult putResult = getOSSClient().putObject(bucketName, diskName + fileName,new ByteArrayInputStream(content), metadata);// 解析结果resultStr = putResult.getETag();} catch (Exception e) {LOG.error("上传阿里云OSS服务器异常." + e.getMessage(), e);}return resultStr;}public static final String uploadObject2OSS(InputStream is, String fileName, Long fileSize, String bucketName,String diskName) {// 获取ossClientOSSClient ossClient = getOSSClient();try {// 生成OSS中Object的元数据ObjectMetadata metadata = new ObjectMetadata();metadata.setContentLength(is.available());metadata.setCacheControl("no-cache");metadata.setHeader("Pragma", "no-cache");metadata.setContentEncoding("utf-8");metadata.setContentType(getContentType(fileName));metadata.setContentDisposition("filename/filesize=" + fileName + "/" + fileSize + "Byte.");// 上传文件PutObjectResult putResult = ossClient.putObject(bucketName, diskName + fileName, is, metadata);// 解析结果return putResult.getETag();} catch (Exception e) {LOG.error("上传阿里云OSS服务器异常." + e.getMessage(), e);throw new RuntimeException("上传文件失败");} finally {ossClient.shutdown();}}public static final InputStream getOSS2InputStream(String bucketName, String diskName, String key) {OSSObject ossObj = getOSSClient().getObject(bucketName, diskName + key);return ossObj.getObjectContent();}public static void deleteFile(String bucketName, String diskName, String key) {getOSSClient().deleteObject(bucketName, diskName + key);LOG.info("删除" + bucketName + "下的文件" + diskName + key + "成功");}public static final String getContentType(String fileName) {String fileExtension = fileName.substring(fileName.lastIndexOf(".") + 1);if ("bmp".equalsIgnoreCase(fileExtension))return "image/bmp";if ("gif".equalsIgnoreCase(fileExtension))return "image/gif";if ("jpeg".equalsIgnoreCase(fileExtension) || "jpg".equalsIgnoreCase(fileExtension)|| "png".equalsIgnoreCase(fileExtension))return "image/jpeg";if ("html".equalsIgnoreCase(fileExtension))return "text/html";if ("txt".equalsIgnoreCase(fileExtension))return "text/plain";if ("vsd".equalsIgnoreCase(fileExtension))return "application/vnd.visio";if ("ppt".equalsIgnoreCase(fileExtension) || "pptx".equalsIgnoreCase(fileExtension))return "application/vnd.ms-powerpoint";if ("doc".equalsIgnoreCase(fileExtension) || "docx".equalsIgnoreCase(fileExtension))return "application/msword";if ("xml".equalsIgnoreCase(fileExtension))return "text/xml";return "text/html";}}123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187

五、FileController 上传接口

package com.file.controller;import com.file.util.JsonResult;import com.file.util.OssUtil;import com.file.util.ResultCode;import org.springframework.beans.factory.annotation.Value;import org.springframework.web.bind.annotation.PostMapping;import org.springframework.web.bind.annotation.RequestMapping;import org.springframework.web.bind.annotation.RequestParam;import org.springframework.web.bind.annotation.RestController;import org.springframework.web.multipart.MultipartFile;import java.util.Map;@RestController@RequestMapping("/file")public class FileController {//@Autowired//private OSSConfig oSSConfig;@Value("${oss.bucket}")private String bucket;@Value("${oss.preUrl}")private String preUrl;//@ApiOperation(value = "上传单个文件")@PostMapping("/singleFile")public Map uploadFile(@RequestParam MultipartFile IMG_gicon) {String gicon = OssUtil.uploadFile(IMG_gicon, 55555L,bucket);String url = preUrl+gicon;return JsonResult.RetJsone(ResultCode.SUCCESS, "上传成功", url);}// @ApiOperation(value = "上传多个文件")@PostMapping("/multipartFiles")public Map uploadFiles( @RequestParam MultipartFile[] IMG_gicons) {String gimg = OssUtil.getIMGS(IMG_gicons, 55555L, bucket);return JsonResult.RetJsone(ResultCode.SUCCESS, "多文件上传成功", gimg);}}

六、测试

Spring Boot整合阿里OSS文件储存服务器详细教程,附源码!


spring boot 获取服务器请求地址 springboot获取服务器文件_bundle_08


程序猿不秃头 2020-06-09 15:12:23


spring boot 获取服务器请求地址 springboot获取服务器文件_bundle_09


181


spring boot 获取服务器请求地址 springboot获取服务器文件_springboot 文件服务器_10


收藏 2

分类专栏: java Spring boot 阿里云OSS

编辑 版权

一、准备工作
开发工具idea,jdk1.8,测试工具 postman 注册阿里云服务器并创建oss储存库,
创建Spring boot空项目
二、
引入pom.xml

org.springframework.boot            spring-boot-starter-web        com.aliyun.oss            aliyun-sdk-oss            2.8.1com.alibaba            fastjson            1.2.411234567891011121314

三、
1.在配置文件中application.yml配置oss的仓库名和访问路径前缀
bucket为仓库名
preUrl为访问前缀
咱们没有配置端口所以默认端口8080


spring boot 获取服务器请求地址 springboot获取服务器文件_bundle_11


2.创建config.properties
endpoint为阿里云地址
accessKeyId为OSS的K
accessKeySecret为OSS的V
注意:生成K,V之后注意保存,因为这个accessKeySecret只显示一次,最好下载保存一下,以免忘记


spring boot 获取服务器请求地址 springboot获取服务器文件_java_12


四、引入我写好的Util
1.JsonResult 封装好的返回类型

package com.file.util;import java.util.HashMap;import java.util.List;import java.util.Map;import org.apache.commons.beanutils.BeanMap;import com.alibaba.fastjson.JSON;import com.alibaba.fastjson.JSONObject;import com.alibaba.fastjson.TypeReference;public class JsonResult {public static Map RetJsonPage(int code, String msg, Object data, String[] field) {Map RetMap = new HashMap<>();RetMap.put("code", code);RetMap.put("msg", msg);if (null == data) {RetMap.put("data", "");} else {RetMap.put("data", FilterMap(data, field));// RetMap.put("data", data);}return RetMap;}private static Map FilterMap(Object data, String[] field) {String[] arr = { "pageNum", "pageSize", "total", "list", "pages" };Map RetMap = new HashMap<>();Map datamap = new BeanMap(data);if (null == field || field.length == 0) {field = arr;}for (int i = 0; i < arr.length; i++) {String key = arr[i];RetMap.put(key, datamap.get(key));}return RetMap;}public static Map RetJsone(int code, String msg, Object data) {Map RetMap = new HashMap<>();RetMap.put("code", code);RetMap.put("msg", msg);RetMap.put("data", data);return RetMap;}public static Object GetJsonVal(String str, String key) {Map mapTypes = JSON.parseObject(str);Map map = new HashMap();return ((JSONObject) mapTypes).getString(key);}public static List> GetJsonList(String str) {List> retmap = JSON.parseObject(str, new TypeReference>>() {});return retmap;}}

2.ResultCode 封装好的返回状态码

package com.file.util;public class ResultCode {/** 成功 */public static final int SUCCESS = 200; // "成功"/** 没有登录 */public static final int NOT_LOGIN = 400; // 没有登录"),/** 发生异常 */public static final int EXCEPTION = 401; // 发生异常"),/** 系统错误 */public static final int SYS_ERROR = 402; // 系统错误"),/** 参数错误 */public static final int PARAMS_ERROR = 403; // 参数错误 "),/** 不支持或已经废弃 */public static final int NOT_SUPPORTED = 410; // 不支持或已经废弃"),/** AuthCode错误 */public static final int INVALID_AUTHCODE = 444; // 无效的AuthCode"),/** 太频繁的调用 */public static final int TOO_FREQUENT = 445; // 太频繁的调用"),/** 未知的错误 */public static final int UNKNOWN_ERROR = 499; // 未知错误");public static final int BALANCE_NOT_ENOUGH = 601;/** 操作有误 */public static final int WRONG_OPERATION = 602;/** 文件过大 */public static final int FILE_TOO_LARGE = 604;/** 结果为空 */public static final int RES_NULL = 700; // 结果为空 ");/** code没有绑定活动 */public static final int ACT_NULL = 701; // code没有绑定活动 ");/** 更新失败 */public static final int UPDATE_FAIL = 702; // 更新失败 ");/** 接口限制 */public static final int API_LIMIT = 703; // 更新失败 ");/** 失败 */public static final int FAIL = 704; // 失败 ");}

3.封装好的OssUtil

package com.file.util;import org.springframework.web.multipart.MultipartFile;import java.io.ByteArrayInputStream;import java.io.ByteArrayOutputStream;import java.io.IOException;import java.io.InputStream;import java.math.BigInteger;import java.security.MessageDigest;/** * 每个用户一个目录保存文件, 以md5为文件名保存文件避免用户上传重复文件 *  * @author ChenPantao * @date 2017年12月15日 */public class OssUtil {        public static String getIMGS(MultipartFile[] IMG_imgs , Long userid, String bucketName){        String imgs = "";        for(int i = 0 ;i

4.用于请求阿里云服务器的Oss

package com.file.util;import java.io.ByteArrayInputStream;import java.io.File;import java.io.FileInputStream;import java.io.InputStream;import java.util.PropertyResourceBundle;import java.util.ResourceBundle;import org.slf4j.Logger;import org.slf4j.LoggerFactory;import org.springframework.web.multipart.MultipartFile;import com.aliyun.oss.OSSClient;import com.aliyun.oss.model.Bucket;import com.aliyun.oss.model.OSSObject;import com.aliyun.oss.model.ObjectMetadata;import com.aliyun.oss.model.PutObjectResult;public class Oss {private static final Logger LOG = LoggerFactory.getLogger(Oss.class);private static String ENDPOINT;private static String ACCESS_KEY_ID;private static String ACCESS_KEY_SECRET;// init static datasstatic {ResourceBundle bundle = PropertyResourceBundle.getBundle("config");ENDPOINT = bundle.containsKey("endpoint") == false ? "" : bundle.getString("endpoint");ACCESS_KEY_ID = bundle.containsKey("accessKeyId") == false ? "" : bundle.getString("accessKeyId");ACCESS_KEY_SECRET = bundle.containsKey("accessKeySecret") == false ? "" : bundle.getString("accessKeySecret");}private static final OSSClient getOSSClient() {return new OSSClient(ENDPOINT, ACCESS_KEY_ID, ACCESS_KEY_SECRET);}public static final boolean createBucket(String bucketName) {Bucket bucket = getOSSClient().createBucket(bucketName);return bucketName.equals(bucket.getName());}public static final void deleteBucket(String bucketName) {getOSSClient().deleteBucket(bucketName);LOG.info("删除" + bucketName + "Bucket成功");}public static final String uploadObject2OSS(File file, String bucketName, String diskName) {String resultStr = null;try {InputStream is = new FileInputStream(file);String fileName = file.getName();Long fileSize = file.length();ObjectMetadata metadata = new ObjectMetadata();metadata.setContentLength(is.available());metadata.setCacheControl("no-cache");metadata.setHeader("Pragma", "no-cache");metadata.setContentEncoding("utf-8");metadata.setContentType(getContentType(fileName));metadata.setContentDisposition("filename/filesize=" + fileName + "/" + fileSize + "Byte.");// 上传文件PutObjectResult putResult = getOSSClient().putObject(bucketName, diskName + fileName, is, metadata);// 解析结果resultStr = putResult.getETag();} catch (Exception e) {LOG.error("上传阿里云OSS服务器异常." + e.getMessage(), e);}return resultStr;}public static final String uploadObject2OSS2(MultipartFile file, String bucketName, String diskName,String fileName) {String resultStr = null;try {InputStream is = file.getInputStream();ObjectMetadata metadata = new ObjectMetadata();metadata.setContentLength(is.available());metadata.setCacheControl("no-cache");metadata.setHeader("Pragma", "no-cache");metadata.setContentEncoding("utf-8");metadata.setContentType(getContentType(fileName));// 上传文件PutObjectResult putResult = getOSSClient().putObject(bucketName, diskName + fileName, is, metadata);// 解析结果resultStr = putResult.getETag();} catch (Exception e) {LOG.error("上传阿里云OSS服务器异常." + e.getMessage(), e);}return resultStr;}public static final String uploadString2OSS(String str, String fileName, String bucketName, String diskName) {String resultStr = null;try {byte[] content = str.getBytes();ObjectMetadata metadata = new ObjectMetadata();metadata.setContentLength(content.length);metadata.setCacheControl("no-cache");metadata.setHeader("Pragma", "no-cache");metadata.setContentEncoding("utf-8");metadata.setContentType(getContentType(fileName));metadata.setContentDisposition("filename/filesize=" + fileName + "/" + content.length + "Byte.");// 上传文件PutObjectResult putResult = getOSSClient().putObject(bucketName, diskName + fileName,new ByteArrayInputStream(content), metadata);// 解析结果resultStr = putResult.getETag();} catch (Exception e) {LOG.error("上传阿里云OSS服务器异常." + e.getMessage(), e);}return resultStr;}public static final String uploadObject2OSS(InputStream is, String fileName, Long fileSize, String bucketName,String diskName) {// 获取ossClientOSSClient ossClient = getOSSClient();try {// 生成OSS中Object的元数据ObjectMetadata metadata = new ObjectMetadata();metadata.setContentLength(is.available());metadata.setCacheControl("no-cache");metadata.setHeader("Pragma", "no-cache");metadata.setContentEncoding("utf-8");metadata.setContentType(getContentType(fileName));metadata.setContentDisposition("filename/filesize=" + fileName + "/" + fileSize + "Byte.");// 上传文件PutObjectResult putResult = ossClient.putObject(bucketName, diskName + fileName, is, metadata);// 解析结果return putResult.getETag();} catch (Exception e) {LOG.error("上传阿里云OSS服务器异常." + e.getMessage(), e);throw new RuntimeException("上传文件失败");} finally {ossClient.shutdown();}}public static final InputStream getOSS2InputStream(String bucketName, String diskName, String key) {OSSObject ossObj = getOSSClient().getObject(bucketName, diskName + key);return ossObj.getObjectContent();}public static void deleteFile(String bucketName, String diskName, String key) {getOSSClient().deleteObject(bucketName, diskName + key);LOG.info("删除" + bucketName + "下的文件" + diskName + key + "成功");}public static final String getContentType(String fileName) {String fileExtension = fileName.substring(fileName.lastIndexOf(".") + 1);if ("bmp".equalsIgnoreCase(fileExtension))return "image/bmp";if ("gif".equalsIgnoreCase(fileExtension))return "image/gif";if ("jpeg".equalsIgnoreCase(fileExtension) || "jpg".equalsIgnoreCase(fileExtension)|| "png".equalsIgnoreCase(fileExtension))return "image/jpeg";if ("html".equalsIgnoreCase(fileExtension))return "text/html";if ("txt".equalsIgnoreCase(fileExtension))return "text/plain";if ("vsd".equalsIgnoreCase(fileExtension))return "application/vnd.visio";if ("ppt".equalsIgnoreCase(fileExtension) || "pptx".equalsIgnoreCase(fileExtension))return "application/vnd.ms-powerpoint";if ("doc".equalsIgnoreCase(fileExtension) || "docx".equalsIgnoreCase(fileExtension))return "application/msword";if ("xml".equalsIgnoreCase(fileExtension))return "text/xml";return "text/html";}}

五、FileController 上传接口

package com.file.controller;import com.file.util.JsonResult;import com.file.util.OssUtil;import com.file.util.ResultCode;import org.springframework.beans.factory.annotation.Value;import org.springframework.web.bind.annotation.PostMapping;import org.springframework.web.bind.annotation.RequestMapping;import org.springframework.web.bind.annotation.RequestParam;import org.springframework.web.bind.annotation.RestController;import org.springframework.web.multipart.MultipartFile;import java.util.Map;@RestController@RequestMapping("/file")public class FileController {//@Autowired//private OSSConfig oSSConfig;@Value("${oss.bucket}")private String bucket;@Value("${oss.preUrl}")private String preUrl;//@ApiOperation(value = "上传单个文件")@PostMapping("/singleFile")public Map uploadFile(@RequestParam MultipartFile IMG_gicon) {String gicon = OssUtil.uploadFile(IMG_gicon, 55555L,bucket);String url = preUrl+gicon;return JsonResult.RetJsone(ResultCode.SUCCESS, "上传成功", url);}// @ApiOperation(value = "上传多个文件")@PostMapping("/multipartFiles")public Map uploadFiles( @RequestParam MultipartFile[] IMG_gicons) {String gimg = OssUtil.getIMGS(IMG_gicons, 55555L, bucket);return JsonResult.RetJsone(ResultCode.SUCCESS, "多文件上传成功", gimg);}}

六、测试


spring boot 获取服务器请求地址 springboot获取服务器文件_java_13


到这里就整合完成了,喜欢的可以点个赞哦!