springboot 文件服务器_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.41
三、
1.在配置文件中application.yml配置oss的仓库名和访问路径前缀
bucket为仓库名
preUrl为访问前缀
咱们没有配置端口所以默认端口8080
2.创建config.properties
endpoint为阿里云地址
accessKeyId为OSS的K
accessKeySecret为OSS的V
注意:生成K,V之后注意保存,因为这个accessKeySecret只显示一次,最好下载保存一下,以免忘记
四、引入我写好的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文件储存服务器详细教程,附源码!
程序猿不秃头 2020-06-09 15:12:23
181
收藏 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
2.创建config.properties
endpoint为阿里云地址
accessKeyId为OSS的K
accessKeySecret为OSS的V
注意:生成K,V之后注意保存,因为这个accessKeySecret只显示一次,最好下载保存一下,以免忘记
四、引入我写好的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文件储存服务器详细教程,附源码!
程序猿不秃头 2020-06-09 15:12:23
181
收藏 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
2.创建config.properties
endpoint为阿里云地址
accessKeyId为OSS的K
accessKeySecret为OSS的V
注意:生成K,V之后注意保存,因为这个accessKeySecret只显示一次,最好下载保存一下,以免忘记
四、引入我写好的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);}}
六、测试
到这里就整合完成了,喜欢的可以点个赞哦!
springboot 文件服务器_Spring Boot整合阿里OSS文件储存服务器详细教程相关推荐
- mysql springboot 缓存_Spring Boot 整合 Redis 实现缓存操作
摘要: 原创出处 www.bysocket.com 「泥瓦匠BYSocket 」欢迎转载,保留摘要,谢谢! 『 产品没有价值,开发团队再优秀也无济于事 – <启示录> 』 本文提纲 一.缓 ...
- springboot 文件服务器_spring boot还不了解?一份spring boot实战文档送给你
这篇文章开始前,让我们来了解spring boot 是什么 1.SpringBoot是什么? 在Spring框架这个大家族中,产生了很多衍生框架,比如 Spring.SpringMvc框架等,Spri ...
- spring boot 整合 阿里云oss上传
Spring Boot 整合 阿里云OSS上传 OSS申请和配置 1. 注册登录 2.开通以及配置 springboot整合使用 1. 进入我们springboot的项目中,导入oss相关依赖 2. ...
- 轻松搞定阿里OSS文件上传和图片下载
轻松搞定阿里OSS文件上传和图片下载 目录 1. 阿里云oss账号准备 1.1 注册阿里云账号,并开通OSS存储服务 1.2 创建RAM子用户并使用子账户的AccessKeyId和Access ...
- 阿里OSS文件流下载问题
阿里OSS文件流下载问题 阿里OSS获取文件流,因为是网络传输流,所以ossObject.getObjectContent().available()不能一次性获取文件大小:传回的文件流,如果一次读取 ...
- 阿里云文件存储NAS使用教程
关于阿里云文件存储NAS的详细了解: 阿里云文件存储NAS使用教程 (阿里云文件存储(Network Attached Storage,简称NAS)是面向阿里云ECS实例.HPC和Docker的文件存 ...
- 服务器文件储存,文件储存服务器
文件储存服务器 内容精选 换一换 远程桌面协议(Remote Desktop Protocol,RDP),是微软提供的多通道的远程登录协议.本节为您介绍如何使用RDP文件远程登录Windows云服务器 ...
- python数据可视化读取excell文件绘制图像详细教程
python数据可视化读取excell文件绘制图像详细教程 python数据可视化 python库中的基本用法 import pandas as pd # 调用pandas库 来读取excell的文件 ...
- Intel(Altera)FPGA的SOF转JIC文件和下载详细教程
Intel(Altera)FPGA的SOF转JIC文件和下载详细教程 以较新的cyclone 10 FPGA为例进行JTAG模式下载JIC文件. quartus烧写文件有三种格式,分别是Pof,Sof ...
最新文章
- 输出不详宗教预言,Google翻译为何“水逆”了?
- 李宏毅深度学习——第一天(Bias and Variance)
- hash地址_到底什么是Hash?
- 如何在 SAP 电商云 Spartacus UI 中创建新的页面
- python官网无法访问_python写的网站,云服务器经常无法访问
- c#之new关键词——隐藏基类方法
- linux mmu的实现的讲解_Linux_MMU
- 室外AIS天线AV400
- 从计算、建模到回测:因子挖掘的最佳实践
- MyBatis官方文档-简介
- Mysql优化碎片空间
- gmx genion命令
- 免费的PDF转换器有哪些?小圆象PDF转换器办公达人必备工具
- 添加额外jars包到Hive
- 基于微信视频直播如何做收费直播(微信公众号直播)?
- 最适合人工智能开发的5种编程语言
- 计算机的主要配件是哪两个,组成计算机cpu的两大部件是什么
- excel - 按钮编程 -脚本编程 - VBA
- 编程入门笔记:状态机模式在工控机中的体现
- 魔兽世界服务器显示负载离线,《WOW》服务器负载过高 官方免费转服
热门文章
- 是什么动词_动词后面跟什么词?答案笑喷...
- word文档墨迹工具的笔不能用_云师之策|找到合适的工具实现理想的在线教学效果...
- oracle的自动增长,Oracle实现id自动增长
- css设定div固定比例,响应式网页中,如何只用CSS实现div的高和宽保持固定比例
- 皮一皮:你的工资去哪了?实锤了!
- Postman 最被低估的功能!
- 皮一皮:这是人干的事?
- Spring Boot 2.4发布了,但 Spring Cloud 用户不推荐着急升级
- 在这个问题上,能看出 Java 工程师的真实水平
- 我说分布式事务之TCC