尚筹网11阿里云OSS对象存储
阿里云OSS对象存储参考文章
将OSS引入项目
思路
准备OSSProperties类
package com.adom.crowd.config; import org.springframework.boot.context.properties.ConfigurationProperties; import org.springframework.stereotype.Component; @Component @ConfigurationProperties(prefix = "aliyun.oss") public class OSSProperties { private String endPoint; private String bucketName; private String accessKeyId; private String accessKeySecret; private String bucketDomain; public OSSProperties() { } public OSSProperties(String endPoint, String bucketName, String accessKeyId, String accessKeySecret, String bucketDomain) { this.endPoint = endPoint; this.bucketName = bucketName; this.accessKeyId = accessKeyId; this.accessKeySecret = accessKeySecret; this.bucketDomain = bucketDomain; }
编写配置文件
server: port: 5000 spring: application: name: adom-crowd-project eureka: client: service-url: http://localhost:1000/eureka aliyun: oss: access-key-id: 自行获取 access-key-secret: 自行获取 bucket-domain: 自行获取 bucket-name:自行获取 end-point: 自行获取
工具方法
导入依赖
<!-- OSS 客户端 SDK --> <dependency> <groupId>com.aliyun.oss</groupId> <artifactId>aliyun-sdk-oss</artifactId> <version>3.5.0</version> </dependency>
编写工具方法
/*** 专门负责上传文件到 OSS 服务器的工具方法 * @param endpoint OSS 参数 * @param accessKeyId OSS 参数 * @param accessKeySecret OSS 参数 * @param inputStream 要上传的文件的输入流 * @param bucketName OSS 参数 * @param bucketDomain OSS 参数 * @param originalName 要上传的文件的原始文件名 * @return 包含上传结果以及上传的文件在 OSS 上的访问路径 */ public static ResultEntity<String> uploadFileToOss( String endpoint, String accessKeyId, String accessKeySecret, InputStream inputStream, String bucketName, String bucketDomain, String originalName) { // 创建 OSSClient 实例。 OSS ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret); // 生成上传文件的目录 String folderName = new SimpleDateFormat("yyyyMMdd").format(new Date()); // 生成上传文件在 OSS 服务器上保存时的文件名 // 原始文件名:beautfulgirl.jpg // 生成文件名:wer234234efwer235346457dfswet346235.jpg // 使用 UUID 生成文件主体名称 String fileMainName = UUID.randomUUID().toString().replace("-", ""); // 从原始文件名中获取文件扩展名 String extensionName = originalName.substring(originalName.lastIndexOf(".")); // 使用目录、文件主体名称、文件扩展名称拼接得到对象名称 String objectName = folderName + "/" + fileMainName + extensionName; try { // 调用 OSS 客户端对象的方法上传文件并获取响应结果数据 PutObjectResult putObjectResult = ossClient.putObject(bucketName, objectName, inputStream); // 从响应结果中获取具体响应消息 ResponseMessage responseMessage = putObjectResult.getResponse(); // 根据响应状态码判断请求是否成功 if (responseMessage == null) { // 拼接访问刚刚上传的文件的路径 String ossFileAccessPath = bucketDomain + "/" + objectName; // 当前方法返回成功 return ResultEntity.sucessWithData(ossFileAccessPath); } else { // 获取响应状态码 int statusCode = responseMessage.getStatusCode(); // 如果请求没有成功,获取错误消息 String errorMessage = responseMessage.getErrorResponseAsString(); // 当前方法返回失败 return ResultEntity.failed(" 当 前 响 应 状 态 码 =" + statusCode + " 错 误 消 息 =" + errorMessage); } } catch (Exception e) { e.printStackTrace(); // 当前方法返回失败 return ResultEntity.failed(e.getMessage()); } finally { if (ossClient != null) { // 关闭 ossClient.shutdown(); } } }
今后项目中重定向问题
描述问题:
如:
http://localhost:4000
http://localhost:80
由于两个端口号不同,因此不是相同的网站,浏览器工作时不会使用相同的Cookie
解决问题
以后重定向的地址都按照Zuul访问的方式写地址
return "redirect:http://www.crowd.com/auth/member/to/login/page";
默认路由到auth
Zuul需要依赖entity工程
问题描述
通过zuul访问所有工程,在成功登陆之后,要前往会员中心页面.
这时,在zuulFilter中需要从session域读取MemberLoginVO对象.SpringSession会从Redis中加载相关信息.
相关信息中包含了MemberLoginVO的全类名
需要根据这个全类名找到MemberLoginVO类,用来反序列化.
可是我们之前没有让Zuul工程依赖entity工程,所以找不到MemberLoginVO类.因此找不到类.
解决问题
让Zuul工程依赖entity工程
<dependency> <groupId>com.adom</groupId> <artifactId>member-entity</artifactId> <version>1.0.0-SNAPSHOT</version> </dependency>
从个人中心跳转到发起项目的表单页面
第一步点击“我的众筹”
<a th:href="@{/member/my/crowd}">我的众筹</a><span class="badge"><i class="glyphicon glyphicon-chevron-right"></i></span>
registry.addViewController("/member/my/crowd").setViewName("member-crowd");
准备member-crowd.html页面
Linux等环境软件安装