首页 > 编程语言 >【javaWeb & 功能介绍第一篇】阿里云OSS文件上传

【javaWeb & 功能介绍第一篇】阿里云OSS文件上传

时间:2024-04-02 16:30:08浏览次数:26  
标签:文件 存储 javaWeb OSS Result 上传 SDK

文件上传

文件上传

文件上传是将本地的图片,视频,音频等文件上传到服务器,供其他用户浏览或下载的过程

文件上传在项目中应用十分广泛,我们经常发微博,发微信都用到了文件上传的功能

在前端的开发之中,如果需要文件上传功能,则必须在form表单中进行定义,且提交方式必须是post(因为文件的内容比较大),表单的数据格式也必须设置为multipart/form-data(因为文件的内容比较大)

<form action="" method="post" enctype="multipart/form-data">
头像:<input type="file" name="image">
</form>

在idea中后端接收文件:
在这里插入图片描述
在接受的方法中面对传递过来的数据文件,我们使用MultipartFile对象接收文件,通过断点测试,发现当传回来的文件中给出一段地址,打开地址是三个临时文件,分别对应三个参数,当通过运行之后发现文件消失,所以需要在后续保存文件

存储文件

本地存储

在服务器端,接受到上传上来的文件之后,将文件存储在本地服务器磁盘中

    @PostMapping("/upload")
    public Result upload(String username, Integer age, MultipartFile image) throws Exception{
        log.info("文件上传:{},{},{}",username,age,image);
        //获取原始文件名
        String originalFilename = image.getOriginalFilename();
        //将文件转存到服务器的磁盘目录当中
        image.transferTo(new File("E:\\images\\"+originalFilename));
        return Result.success();
    }

对待文件的集成方法已经涵盖在了MultipartFile对象之中,transferTo可以指定将文件保存在指定目录下

但是这样会出现一个问题,采用原始数据名保存,当下一个名字相同的文件再次传输上来会覆盖之前的文件,这样就会出现问题,所以需要构造唯一的文件名
这个文件名就使用uuid(通用唯一识别码)
在对这个文件进行命名的时候采用 uuid+ 文件名后缀来进行命名

        //构造唯一标识码
        int i = originalFilename.indexOf(".");
        String substring = originalFilename.substring(i);
        String newFileName= UUID.randomUUID().toString()+substring.toString();
        log.info("新的文件名:{}",newFileName);
        //将文件转存到服务器的磁盘目录当中
        image.transferTo(new File("E:\\images\\"+newFileName));

通过UUID类来创建唯一标识的字符串,并将拼接好的字符串加入到路径字符串

当上传文件服务器端出现如下错误:
报错
这个错误说明当前请求的文件超过了文件大小限制,在spring中默认单个文件上传的最大大小为1M,如果需要上传大文件,可进行如下配置:

//配置单个文件最大上传大小
spring.servlet.multipart.max-file-size=10MB   //默认为1M
//配置单个请求最大的上传大小(一次请求可以上传多个文件)
spring.servlet.multipart.max-request-size=100MB     //默认为10M
  • 文件存储本地的弊端
  1. 存储在服务器磁盘目录的数据文件,在最后是无法在前端页面上展现的
  2. 磁盘容量有限

常用方法:MultipartFile类中
在这里插入图片描述

云服务

为了处理本地存储的弊端,现在采用的存储方式

  • 第一种:自主搭建

项目组自己搭建一套存储服务来自己存储上传的文件例如:

  1. FastDFS分布式文件系统
  2. Minlo对象存储服务集群

这个需要项目私人储备服务器

  • 第二种:云服务

大型互联网公司提供的云服务服务器,比如阿里云OSS

阿里云

阿里云是阿里巴巴集团旗下的全球领先的云计算公司,也是国内最大的云服务提供商
云服务
阿里云不只由存储服务平台,还有提前设置好的各种功能服务

阿里云对象存储OSS(Object Storage Service)是一款海量,安全,低成本,高可靠的云存储服务,使用OSS,您可以通过网络随时存储和调用包括文本,图片,音频和视频等在内的各种文件

  • 如何使用阿里云OSS
  1. 登录注册,简单配置
  2. 参照官方SDK编写入门程序

SDK:软件开发工具包,包括辅助软件开发依赖(jar包),代码示例等,都可叫做SDK

  1. 在项目中集成使用

准备工作:
在这里插入图片描述

Bucket:存储空间是用户用于存储对象(Object,就是文件)的容器,所有对象都必须隶属于某个存储空间。

阿里云地址:https://www.aliyun.com
创建Bucket:
在这里插入图片描述
填写名称,一般地域选择默认,剩下的一般默认,读写权限设置为公共读

获取AccessKey密钥:
在这里插入图片描述
右上角的头像,选择AccessKey管理

  • SDK

在左侧的栏中找到SDK下载,点击SDK示例
在这里插入图片描述

点击后出现官方文档,点击在文档中心打开,查看SDK文档找到对应的操作
这里找到Maven项目下的官方依赖

在SDK文档中找到关于Java文件上传的文档,进行简单修改

  • 阿里云OSS集成

当前端传输上传一张图片的时候:

  1. 在Controller类中接收上传的图片
  2. 将图片储存起来(OSS)
  3. 返回图片访问的URL
  • 开发文件上传接口
  1. 引入阿里云OSS上传文件工具类(由官方的示例代码改造而来)
  2. 上传图片接口开发
@Data
@AllArgsConstructor
@NoArgsConstructor
public class Result {
    private Integer code;  //响应码,1代表成功,0表示失败
    private String msg; //响应信息,描述字符串
    private Object data;//返回的数据
    public static Result success(){ //增删改,成功响应
        return new Result(1,"success",null);
    }
    public static Result success(Object data){//查询 成功响应
        return new Result(1,"success",data);
    }
    public static Result success(String msg){//失败响应
        return new Result(0,msg,null);
    }
}

标签:文件,存储,javaWeb,OSS,Result,上传,SDK
From: https://blog.csdn.net/weixin_62513677/article/details/137194547

相关文章

  • 盘点那些好用的SAP FIORI App(二) -上传凭证Upload Journal Entry
    前面我有提到过,SAP录入凭证的界面是用户不友好的,并且介绍了几种快速录入的方法,科目分配模型,参考凭证等,但是今天我要讲到的这个app是最实用的,强烈推荐大家使用,因为这个可以用excel的方法直接上传过账,并且不需要额外的定制开发。AppID:F2548点击app进入如下界面,我们可以先......
  • JavaWeb学习笔记——第十二天
    SpringBootWeb案例(三)登录功能LoginController:importcom.zgg1h.pojo.Emp;importcom.zgg1h.pojo.Result;importcom.zgg1h.service.EmpService;importlombok.extern.slf4j.Slf4j;importorg.springframework.beans.factory.annotation.Autowired;importorg.springfram......
  • WEB专项-文件上传&命令执行&SSTI模板注入&其他
    文件上传一、Upload11.进入靶场,是一个文件上传功能的页面,尝试上传一个一句话木马去getshell。2.发现提示是notimage,那就通过burp抓包进行类型的修改。3.但却提示我这个是php代码,看来对文件的后缀名进行了过滤,那就将其后缀名改为jpg。4.又提示我文件中包含<?,那接下来......
  • BSL: Understanding and Improving Softmax Loss for Recommendation
    目录概符号说明SoftmaxlossBilateralSoftmaxloss(BSL)代码WuJ.,ChenJ.,WuJ.,ShiW.,ZhangJ.andWangX.BSL:UnderstandingandImprovingSoftmaxLossforRecommendation.ICDE,2024.概作者'发现'在协同过滤中,Softmaxloss会比BCE/BPR损失效果好很多,......
  • 微信小程序裁剪图片(上传头像裁剪)完整源码
    效果图(将下面的代码复制粘贴就可以做出来了)第一步    将资源文件解压放到utils目录下第二步        页面json配置文件引入组件{"usingComponents":{"image-cropper":"/utils/image-cropper/image-cropper"},"navigationStyle":"custom"......
  • uniapp上传图片
     如图:<viewclass="flex-subflex"v-else-if="field.type=='image'||!field.type"> <viewclass="flex-sub"> <imagev-if="form[field.name]":src="form[field.name]"mode="aspectF......
  • github上传大文件(超过100M)
    下载安装windowsinstaller运行windowsinstaller在命令行执行gitlfsinstallLinuxcurl-shttps://packagecloud.io/install/repositories/github/git-lfs/script.deb.sh|sudobashsudoapt-getinstallgit-lfsgitlfsinstallMac安装HomeBrew/usr/......
  • 【Azure Function & Application Insights】调用Function上传和下载文件,有时候遇见大
    问题描述在FunctionApp中配置了无代码模式的ApplicationInsights,但有时候发现,超过1MB的文件上传/下载操作成功。但是在ApplicationInsights中,却没有发现请求日志?这是一种什么情况呢? 问题解答ApplicationInsights 是具有采样功能的,当传入执行的速率超过指定的阈值时,Appl......
  • 云原生最佳实践系列 7:基于 OSS Object FC 实现非结构化文件实时处理
    方案概述现在绝大多数客户都有很多非结构化的数据存在OSS中,以图片,视频,音频居多。举一个图片处理的场景,现在各种终端种类繁多,不同的终端对图片的格式、分辨率要求也不同,所以一张图片往往会有很多张衍生图,那如果所有的衍生图都存在OSS中,那存储的成本会增加,所以就可以通过OSSO......
  • 使用Element-UI的form表单验证文件是否上传
    项目中有个需求,表单中的文件为必传项。 其中使用了element-ui的form表单验证,话不多说,上代码。<template><div><el-formlabel-position="top":model="reportForm"ref="checkerForm":rules="rules"label-......