javaweb后端文件上传

一.本地存储

(一)基础知识 

(二)代码

@GetMapping("/upload")
    public Result upload(MultipartFile image) throws Exception{
        log.info("文件上传:{}",image);
        
        /**
         * 1.获取原文件名 ——> 1.jpg、123.0.0.jpg
         */
        
        String originalFilename = image.getOriginalFilename();

        /**
         * 2.构造唯一的文件名(不重复)——> uuid(通用唯一识别码) 
         */
        
        int index = originalFilename.lastIndexOf(".");
        String extname = originalFilename.substring(index);
        String newFileName = UUID.randomUUID().toString() + extname;

        /**
         * 3.将文件存储在服务器的磁盘目录中 E:\images 
         */
        
        image.transferTo(new File("E:\\images\\" + newFileName));
        
        return Result.success();
    }

(三) 配置文件优化

 

#配置单个文件上传大小限制
spring.servlet.multipart.max-file-size=10MB
#配置单个请求上传多个文件的大小限制
spring.servlet.multipart.max-request-size=100MB

二.阿里云OSS存储

(一)步骤

1.注册阿里云(实名认证)

2.充值(新用户可以体验三个月)

3.开通对象存储(OSS)

4.创建bucket

唯一注意的是更改读写权限为:公共读

其他的如果没有自己想搞的功能,则默认即可

5.获取AccessKey(密钥)

点击右上角头像 —— 点击AccessKey管理 —— 创建AccesKey

【注意】

目前AccessKey Secret (即密码)已经无法二次查看,所以在创建的时候,务必要保存好 AccessKey Secret

6.参照官方SDK编写入门程序

导入依赖

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

如果使用的是Java 9及以上的版本,则需要添加jaxb相关依赖。添加jaxb相关依赖示例代码如下: 

<dependency>
    <groupId>javax.xml.bind</groupId>
    <artifactId>jaxb-api</artifactId>
    <version>2.3.1</version>
</dependency>
<dependency>
    <groupId>javax.activation</groupId>
    <artifactId>activation</artifactId>
    <version>1.1.1</version>
</dependency>
<!-- no more than 2.3.3-->
<dependency>
    <groupId>org.glassfish.jaxb</groupId>
    <artifactId>jaxb-runtime</artifactId>
    <version>2.3.3</version>
</dependency>

 

7.案例集成OSS

阿里云工具类代码

/**
 * 阿里云 OSS 工具类
 */
@Component
public class AliOSSUtils {
    // 根据自动的OSS修改自己的下面的四个属性
    // 地域节点
    private String endpoint = "https://oss-cn-beijing.aliyuncs.com";
    // bucketId
    private String accessKeyId = "LTAI5tPhbTZAmpuC4";
    // buck密码
    private String accessKeySecret = "Iwhgf2lQF4guKYr5hZPPd5H";
    // buck名称
    private String bucketName = "web-vuespringboot";

    /**
     * 实现上传图片到OSS
     */
    public String upload(MultipartFile file) throws IOException {
        // 获取上传的文件的输入流
        InputStream inputStream = file.getInputStream();

        // 避免文件覆盖
        String originalFilename = file.getOriginalFilename();
        String fileName = UUID.randomUUID().toString() + originalFilename.substring(originalFilename.lastIndexOf("."));

        //上传文件到 OSS
        OSS ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret);
        ossClient.putObject(bucketName, fileName, inputStream);

        //文件访问路径
        String url = endpoint.split("//")[0] + "//" + bucketName + "." + endpoint.split("//")[1] + "/" + fileName;

        // 关闭ossClient
        ossClient.shutdown();

        // 把上传到oss的路径返回
        return url;

    }
}

实现类

//阿里云OOS
    @PostMapping("/upload")
    public Result upload(MultipartFile image) throws IOException {
        log.info("文件上传,文件名字:{}", image.getOriginalFilename());

        //调用阿里云OSS工具类进行文件上传
        String url = aliOSSUtils.upload(image);
        log.info("文件上传完成,文件访问的url:{}", url);
        return Result.success(url);
    }

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值