尚筹网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页面

 

posted @ 2020-07-25 20:14  Adom_ye  阅读(221)  评论(0编辑  收藏  举报