Java使用OSS實現上傳文件


阿里雲OSS使用

1.准備OSS

  1. 訪問阿里雲官網,注冊並登錄賬戶(支付寶方便一些,順便沖點錢)
  2. 在產品分類中,找到阿里雲oss
  3. 然后創建一個bucket

2.使用OSS(上傳文件)

2.1在阿里雲網站導出阿里雲頒發的 id 和 秘鑰

2.2導入maven坐標

<dependency>
    <groupId>com.aliyun.oss</groupId>
    <artifactId>aliyun-sdk-oss</artifactId>
    <version>3.1.0</version>
</dependency>

2.3進入阿里雲oss的學習路徑,找到對應java操作的代碼

2.3.1首先創建配置文件,將秘鑰等信息進行配置

#服務端口
server.port=8002
#服務名
spring.application.name=service-oss

#環境設置:dev、test、prod
spring.profiles.active=dev

#阿里雲 OSS
#不同的服務器,地址不同
aliyun.oss.file.endpoint=oss-cn-beijing.aliyuncs.com
aliyun.oss.file.keyid=自己的keyid
aliyun.oss.file.keysecret=自己的keysecret
#bucket可以在控制台創建,也可以使用java代碼創建
aliyun.oss.file.bucketname=自己創建的bucket名字

2.3.2創建一個工具類,將配置的屬性注入到容器中

package com.gyb.eduoss.utils;

import lombok.Data;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;

/**
 * @Author: 郜宇博
 * @Date: 2021/9/30 14:54
 */
@Component
@ConfigurationProperties(prefix = "aliyun.oss.file")
@Data
public class AliyunOSSProUtil {
    private String endpoint;
    private String keyid;
    private String keysecret;
    private String bucketname;


}

2.3.3編寫java實現類代碼(文件上傳)

package com.gyb.eduoss.service.impl;

import com.aliyun.oss.OSS;
import com.aliyun.oss.OSSClientBuilder;
import com.gyb.eduoss.service.OssService;
import com.gyb.eduoss.utils.AliyunOSSProUtil;
import org.joda.time.DateTime;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.web.multipart.MultipartFile;

import java.io.IOException;
import java.io.InputStream;

/**
 * @Author: 郜宇博
 * @Date: 2021/9/30 15:53
 */
@Service
public class OssServiceImpl implements OssService {
    @Autowired
    AliyunOSSProUtil aliyunOSSProUtil;

    @Override
    public String uploadFileAvatar(MultipartFile multipartFile) {
        //從工具類獲取配置文件中的oss值
        String endpoint = aliyunOSSProUtil.getEndpoint();
        String accessKeyId = aliyunOSSProUtil.getKeyid();
        String accessKeySecret = aliyunOSSProUtil.getKeysecret();
        String bucketName = aliyunOSSProUtil.getBucketname();
        System.out.println("endponit:"+endpoint);
        // 創建OSSClient實例。
        OSS ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret);

        // 填寫本地文件的完整路徑。
        // 如果未指定本地路徑,則默認從示例程序所屬項目對應本地路徑中上傳文件流。
        InputStream inputStream;
        try {
            inputStream = multipartFile.getInputStream();

            //參數一:依次填寫Bucket名稱
            // 參數二:文件名稱,或Object完整路徑(例如exampledir/exampleobject.txt)。Object完整路徑中不能包含Bucket名稱。
            // 參數三:輸入流
            String currentTime = String.valueOf(System.currentTimeMillis());
            String currentDate = new DateTime().toString("yyyy/MM/dd");
            String  originalFileName = multipartFile.getOriginalFilename();
            String fileName = currentDate+"/"+currentTime+originalFileName;
            ossClient.putObject(bucketName,fileName, inputStream);
            String url = "https://"+bucketName+"."+endpoint+"/"+fileName;
            return url;

        } catch (IOException e) {
            e.printStackTrace();
        }finally {
            // 關閉OSSClient。
            ossClient.shutdown();
        }
        return null;
    }
}

2.3.4創建config類,防止傳入文件為null

package com.gyb.eduoss.config;

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.multipart.MultipartResolver;
import org.springframework.web.multipart.commons.CommonsMultipartResolver;

/**
 * @Author: 郜宇博
 * @Date: 2021/10/2 00:21
 */
@Configuration
public class UploadConfig {
    @Bean(name = "multipartResolver")
    public MultipartResolver multipartResolver() {
        CommonsMultipartResolver resolver = new CommonsMultipartResolver();
        resolver.setDefaultEncoding("UTF-8");
        //resolveLazily屬性啟用是為了推遲文件解析,以在在UploadAction中捕獲文件大小異常
        resolver.setResolveLazily(true);
        resolver.setMaxInMemorySize(40960);
        //上傳文件大小 5M 5*1024*1024
        resolver.setMaxUploadSize(5 * 1024 * 1024);
        return resolver;
    }
}

3.配置Nginx反向代理(可以不配)

下載Nginx

實現將對應訪問地址進行正則匹配轉發

3.1將監聽端口改為81(防止沖突)

3.2配置轉發列表

server {
        listen       9001;
		server_name  localhost;
#代表帶有eduservice路徑的請求都走http://localhost:8001
        location ~ /eduservice/ {
            proxy_pass http://localhost:8001;
        }
#代表帶有eduoss的請求都走http://localhost:8002		
		location ~ /eduoss/ {
            proxy_pass http://localhost:8002;
        }
    }

4.結果

此時將前端的訪問接口改為9001,即可實現下圖功能

從而實現功能不同的請求訪問不同的服務器


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM