栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

Java实现文件上传阿里OSS

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Java实现文件上传阿里OSS

前言简介

​ 这边博文实际上想要展现的是一个文件上传阿里OSS的工具类,但是过程是完全实现一个公司根据业务需求去开发实现上传的一个业务需求,综合比较其他博文,这篇博文可能比较罗嗦点.所以根据自身需求来决定是否需要借用此篇博客.

开发工具

idea + maven + postman(用来作为测试工具)

开发环境

jdk 1.8 + SpringBoot + maven(jar包管理)

jar包版本:2.8.2


    com.aliyun.oss
    aliyun-sdk-oss
    2.8.2

OSS-初始化OSSClient

生成一个已经配置好的OSSClient对象

endpoint: 带有地域节点的请求地址

keyid: 阿里云用户id

keysecret:阿里云用户密码

oss.endpoint = oss-cn-shanghai.aliyuncs.com
oss.keyid= *********
oss.keysecret= *********
import com.aliyun.oss.OSSClient;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;


@Configuration
public class OSSClientConfig {
    @Value("${oss.endpoint}")
    String endpoint;
    @Value("${oss.keyid}")
    String accessKeyId;
    @Value("${oss.keysecret}")
    String accessKeySecret;

    // 创建OSS客户端Bean
    @Bean
    public OSSClient getOSSClient() {
        return new OSSClient(endpoint, accessKeyId, accessKeySecret);
    }
}
OSS-上传工具类

bucketname: 阿里云存储空间名

fileHost: 阿里服务器的域名

filePath: 上传文件路径

oss.bucketname = xxxxxx
oss.fileHost= xxxxxx
oss.filePath= upload
package com.gd.common.utils.oss;

import com.aliyun.oss.ClientException;
import com.aliyun.oss.OSSClient;
import com.aliyun.oss.OSSException;
import com.aliyun.oss.model.CannedAccessControlList;
import com.aliyun.oss.model.CreateBucketRequest;
import com.aliyun.oss.model.PutObjectRequest;
import com.aliyun.oss.model.PutObjectResult;
import lombok.extern.log4j.Log4j2;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
import javax.annotation.Resource;
import java.io.File;


@Component
@Log4j2
public class AliyunOSSUtil {
    @Value("${oss.bucketname}")
    String bucketName;
    @Resource
    private OSSClient client;

    
    public String upLoad(File file, String fileUrl) {
        log.info("------OSS文件上传开始--------" + file.getName());
        // 判断文件是否为空
        if (file == null) {
            return null;
        }

        try {
            // 判断容器是否存在,不存在就创建
            if (!client.doesBucketExist(bucketName)) {
                client.createBucket(bucketName);
                CreateBucketRequest createBucketRequest = new CreateBucketRequest(bucketName);
                createBucketRequest.setCannedACL(CannedAccessControlList.PublicRead);
                client.createBucket(createBucketRequest);
                // 设置权限(公开读)
                client.setBucketAcl(bucketName, CannedAccessControlList.PublicRead);
            }
            // 上传文件
            PutObjectResult result = client.putObject(new PutObjectRequest(bucketName, fileUrl, file));
            if (result != null) {
                log.info("------OSS文件上传成功------" + fileUrl);
                return fileUrl;
            }
        } catch (OSSException oe) {
            log.error(oe.getMessage());
        } catch (ClientException ce) {
            log.error(ce.getErrorMessage());
        } finally {
        }
        return null;
    }
}
业务功能实现
  • 获取服务器域名网址
  • 单文件上传
  • 多文件上传
service
import org.springframework.web.multipart.MultipartFile;
 
public interface OssUploadService {

    
    String upload(MultipartFile file);
}
impl
package com.maoni.ssmtest.service.impl;

import com.maoni.ssmtest.service.OssUploadService;
import com.maoni.ssmtest.utils.date.DatePattern;
import com.maoni.ssmtest.utils.date.DateUtils;
import com.maoni.ssmtest.utils.aliOSSUtil.AliyunOSSUtil;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;
import org.springframework.web.multipart.MultipartFile;

import java.io.File;
import java.io.FileOutputStream;
import java.util.Date;



@Service
public class OssUploadServiceImpl implements OssUploadService {

    private  final AliyunOSSUtil aliyunOSSUtil;

    @Autowired
    public OssUploadServiceImpl(AliyunOSSUtil aliyunOSSUtil){
        this.aliyunOSSUtil = aliyunOSSUtil;
    }

    @Value("${oss.filePath}")
    private String filePath;

    @Override
    public String upload(MultipartFile file) {
        // 返回客户端文件系统中的原始文件名
        String fileName = file.getOriginalFilename();
        System.out.println(fileName);

        try{
            if (file != null) {
                // 判定文件名是否为 ""
                if (!"".equals(fileName.trim())) {
                    File newFile = new File(fileName);
                    FileOutputStream os = new FileOutputStream(newFile);
                    // 以字节数组的形式返回文件的内容,再输出到文件输出流中
                    os.write(file.getBytes());
                    os.close();
                    // 将接受的文件传输到给定的目标文件 file-->newFile
                    file.transferTo(newFile);
                    // 根据不同文件 类型/日期 生成不同的文件夹
                    Date date = new Date();
                    String datePath = DateUtils.formatDateByStyle(date, DatePattern.CN_DATE_BASIC_STYLE4.getDatePattern());
                    String timeStamp = String.valueOf(System.currentTimeMillis());
                    fileName = timeStamp + fileName.substring(fileName.lastIndexOf("."));
                    String path;
                    if (fileName.endsWith(".jpg") || fileName.endsWith(".jpeg") || fileName.endsWith(".png")) {
                        // images
                        path = filePath + "images/" + datePath + "/" + fileName;
                    } else {
                        path = filePath + "other/" + datePath + "/" + fileName;
                    }
                    // 上传到OSS
                    String uploadUrl = aliyunOSSUtil.upLoad(newFile, path);
                    newFile.delete();
                    if (uploadUrl != null) {
                        return uploadUrl;
                    }
                }
            }
        }catch (Exception e){
            e.printStackTrace();
        }
        return null;
    }
}
controller
import com.maoni.ssmtest.domain.OssData;
import com.maoni.ssmtest.service.OssUploadService;
import com.maoni.ssmtest.utils.AjaxResult;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Scope;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;

import java.util.HashMap;
import java.util.List;
import java.util.Map;


@RestController
@Scope("prototype")
@RequestMapping("oss")
public class OssUploadController {

    private final OssUploadService ossUploadService;

    @Value("${oss.fileHost}")
    String fileHost;

    @Autowired
    public OssUploadController(OssUploadService ossUploadService) {
        this.ossUploadService = ossUploadService;
    }

    
    @GetMapping("getHost")
    public AjaxResult getHost() {
        OssData ossData = new OssData();
        ossData.setHost(fileHost);
        return AjaxResult.AjaxSuccess(ossData);
    }

    
    @PostMapping("fileUpload")
    public AjaxResult fileUpload(@RequestParam("file") MultipartFile file) {
        OssData ossData = new OssData();
        // 上传文件返回url
        String url = ossUploadService.upload(file);
        if (url != null) {
            ossData.setHost(fileHost);
            ossData.setPath(fileHost + url);
            return AjaxResult.AjaxSuccess(ossData);
        } else {
            return AjaxResult.AjaxError(300, "上传失败");
        }
    }

    
    @PostMapping("filesUpload")
    public AjaxResult filesUpload(@RequestParam("file") List files) {
        OssData ossData = new OssData();
        Map urls = new HashMap<>();
        for (MultipartFile file : files) {
            String url = ossUploadService.upload(file);
            if (url != null) {
                String fileName = file.getOriginalFilename();
                url = fileHost + url;
                urls.put(fileName, url);
            } else {
                ossData.setFileName(file.getOriginalFilename());
                ossData.setPath(fileHost + url);
                return AjaxResult.AjaxError(100, ossData, "上传失败");
            }
        }
        return AjaxResult.AjaxSuccess(urls);
    }

    
    @PostMapping("filesUploadMore")
    public AjaxResult filesUploadMore(@RequestParam("file01") List file01, @RequestParam("file02") List file02) {
        OssData ossData = new OssData();
        Map urls = new HashMap<>();
        for (MultipartFile file : file01) {
            try {
                String url = ossUploadService.upload(file);
                if (url != null) {
                    String fileName = file.getOriginalFilename();
                    url = fileHost + url;
                    urls.put(fileName, url);
                } else {
                    ossData.setFileName(file.getOriginalFilename());
                    return AjaxResult.AjaxError(100, ossData, "上传失败");
                }
            } catch (Exception e) {
                e.printStackTrace();
                ossData.setFileName(file.getOriginalFilename());
                return AjaxResult.AjaxError(100, ossData, "上传失败");
            }
        }

        for (MultipartFile file : file02) {
            try {
                String url = ossUploadService.upload(file);
                if (url != null) {
                    String fileName = file.getOriginalFilename();
                    url = fileHost + url;
                    urls.put(fileName, url);
                } else {
                    ossData.setFileName(file.getOriginalFilename());
                    return AjaxResult.AjaxError(100, ossData, "上传失败");
                }
            } catch (Exception e) {
                e.printStackTrace();
                ossData.setFileName(file.getOriginalFilename());
                return AjaxResult.AjaxError(100, ossData, "上传失败");
            }
        }
        return AjaxResult.AjaxSuccess(urls);
    }
}
Postman测试结果

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/463314.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号