一、准备工作
开发工具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文件储存服务器详细教程相关推荐

  1. mysql springboot 缓存_Spring Boot 整合 Redis 实现缓存操作

    摘要: 原创出处 www.bysocket.com 「泥瓦匠BYSocket 」欢迎转载,保留摘要,谢谢! 『 产品没有价值,开发团队再优秀也无济于事 – <启示录> 』 本文提纲 一.缓 ...

  2. springboot 文件服务器_spring boot还不了解?一份spring boot实战文档送给你

    这篇文章开始前,让我们来了解spring boot 是什么 1.SpringBoot是什么? 在Spring框架这个大家族中,产生了很多衍生框架,比如 Spring.SpringMvc框架等,Spri ...

  3. spring boot 整合 阿里云oss上传

    Spring Boot 整合 阿里云OSS上传 OSS申请和配置 1. 注册登录 2.开通以及配置 springboot整合使用 1. 进入我们springboot的项目中,导入oss相关依赖 2. ...

  4. 轻松搞定阿里OSS文件上传和图片下载

    轻松搞定阿里OSS文件上传和图片下载 目录 1. 阿里云oss账号准备   1.1 注册阿里云账号,并开通OSS存储服务   1.2 创建RAM子用户并使用子账户的AccessKeyId和Access ...

  5. 阿里OSS文件流下载问题

    阿里OSS文件流下载问题 阿里OSS获取文件流,因为是网络传输流,所以ossObject.getObjectContent().available()不能一次性获取文件大小:传回的文件流,如果一次读取 ...

  6. 阿里云文件存储NAS使用教程

    关于阿里云文件存储NAS的详细了解: 阿里云文件存储NAS使用教程 (阿里云文件存储(Network Attached Storage,简称NAS)是面向阿里云ECS实例.HPC和Docker的文件存 ...

  7. 服务器文件储存,文件储存服务器

    文件储存服务器 内容精选 换一换 远程桌面协议(Remote Desktop Protocol,RDP),是微软提供的多通道的远程登录协议.本节为您介绍如何使用RDP文件远程登录Windows云服务器 ...

  8. python数据可视化读取excell文件绘制图像详细教程

    python数据可视化读取excell文件绘制图像详细教程 python数据可视化 python库中的基本用法 import pandas as pd # 调用pandas库 来读取excell的文件 ...

  9. Intel(Altera)FPGA的SOF转JIC文件和下载详细教程

    Intel(Altera)FPGA的SOF转JIC文件和下载详细教程 以较新的cyclone 10 FPGA为例进行JTAG模式下载JIC文件. quartus烧写文件有三种格式,分别是Pof,Sof ...

最新文章

  1. 输出不详宗教预言,Google翻译为何“水逆”了?
  2. 李宏毅深度学习——第一天(Bias and Variance)
  3. hash地址_到底什么是Hash?
  4. 如何在 SAP 电商云 Spartacus UI 中创建新的页面
  5. python官网无法访问_python写的网站,云服务器经常无法访问
  6. c#之new关键词——隐藏基类方法
  7. linux mmu的实现的讲解_Linux_MMU
  8. 室外AIS天线AV400
  9. 从计算、建模到回测:因子挖掘的最佳实践
  10. MyBatis官方文档-简介
  11. Mysql优化碎片空间
  12. gmx genion命令
  13. 免费的PDF转换器有哪些?小圆象PDF转换器办公达人必备工具
  14. 添加额外jars包到Hive
  15. 基于微信视频直播如何做收费直播(微信公众号直播)?
  16. 最适合人工智能开发的5种编程语言
  17. 计算机的主要配件是哪两个,组成计算机cpu的两大部件是什么
  18. excel - 按钮编程 -脚本编程 - VBA
  19. 编程入门笔记:状态机模式在工控机中的体现
  20. 魔兽世界服务器显示负载离线,《WOW》服务器负载过高 官方免费转服

热门文章

  1. 是什么动词_动词后面跟什么词?答案笑喷...
  2. word文档墨迹工具的笔不能用_云师之策|找到合适的工具实现理想的在线教学效果...
  3. oracle的自动增长,Oracle实现id自动增长
  4. css设定div固定比例,响应式网页中,如何只用CSS实现div的高和宽保持固定比例
  5. 皮一皮:你的工资去哪了?实锤了!
  6. Postman 最被低估的功能!
  7. 皮一皮:这是人干的事?
  8. Spring Boot 2.4发布了,但 Spring Cloud 用户不推荐着急升级
  9. 在这个问题上,能看出 Java 工程师的真实水平
  10. 我说分布式事务之TCC