当前位置: 首页 > news >正文

文件上传学习笔记

笔记

文件上传

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

  • 文件上传前端三要素 :

    • file表单项

    • post方式

    • multipart/from-data

  • 服务端接收文件 : 用spring中的API : MultipartFile

  • 要想文件名唯一 : 可以使用uuid技术

  • 在SpringBoot中,文件上传,默认的单个文件最大允许最大大小为1M,如果需要上传大文件,可以在application.properties中进行如下配置:

    #配置单个文件最大上传大小
    spring.servlet.multipart.max-file-size=10MB
    ​
    #配置单个请求最大上传大小(一次请求可以上传多个文件)
    spring.servlet.multipart.max-request-size=100MB

  • 文件的本地存储 :

    image.transferTo(new File("pathname"));

  • 本地存储 : 无法直接访问 , 磁盘空间限制 , 磁盘损坏

  • OSS :

    • 为每一个文件都提供了一个访问路径,可以直接访问到该文件

    • 在aliyun中存储文件;

第三方服务的通用思路:

  1. 准备工作

  2. 参照官方SDk编写入门程序

  3. 集成使用

注意 :

  • SDk :Software Development Kit的缩写,软件开发工具包,包括辅助软件开发工具包(jar包),代码示例等,都可以叫做SDk;

阿里云OSS - 使用步骤

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

  2. 充值

  3. 开通对象存储服务(OSS):

    • 点击右上角的控制台。

    • 将鼠标移至左上角三条横线处,在显示界面中单击对象存储OSS。

    • 然后点击开通

  4. 创建bucket : 直接点击左上角的新建Bucket,然后其它不用改,取一个唯一的name,然后将读写权限改为公共读。

  5. 获取AccessKey : 注意保存AccessKey和Secret

  6. 参照官方SDk编写入门程序 : 点击右下角的SDk下载,然后在新出现的页面中点击SDk示例,参考官方文档照做即可,如java : copy相关语言文件上传的代码即可,如下 :

    import org.junit.jupiter.api.Test;
    import com.aliyun.oss.ClientException;
    import com.aliyun.oss.OSS;
    import com.aliyun.oss.OSSClientBuilder;
    import com.aliyun.oss.OSSException;
    import java.io.FileInputStream;
    import java.io.InputStream;
    ​
    public class AliOssTest {
    ​@Testpublic void testOss(){// Endpoint以华东1(杭州)为例,其它Region请按实际情况填写。String endpoint = "https://oss-cn-hangzhou.aliyuncs.com";// 阿里云账号AccessKey拥有所有API的访问权限,风险很高。强烈建议您创建并使用RAM用户进行API访问或日常运维,请登录RAM控制台创建RAM用户。String accessKeyId = "---------------------";String accessKeySecret = "-----------------------";// 填写Bucket名称,例如examplebucket。String bucketName = "-----------";// 填写Object完整路径,完整路径中不能包含Bucket名称,例如exampledir/exampleobject.txt。String objectName = "0001.jpg";// 填写本地文件的完整路径,例如D:\\localpath\\examplefile.txt。// 如果未指定本地路径,则默认从示例程序所属项目对应本地路径中上传文件流。String filePath= "C:\\Users\\Administrator\\Pictures\\Saved Pictures\\10.jpg";
    ​// 创建OSSClient实例。OSS ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret);
    ​try {InputStream inputStream = new FileInputStream(filePath);// 创建PutObject请求。ossClient.putObject(bucketName, objectName, inputStream);} catch (OSSException oe) {System.out.println("Caught an OSSException, which means your request made it to OSS, "+ "but was rejected with an error response for some reason.");System.out.println("Error Message:" + oe.getErrorMessage());System.out.println("Error Code:" + oe.getErrorCode());System.out.println("Request ID:" + oe.getRequestId());System.out.println("Host ID:" + oe.getHostId());} catch (Exception ce) {System.out.println("Caught an ClientException, which means the client encountered "+ "a serious internal problem while trying to communicate with OSS, "+ "such as not being able to access the network.");System.out.println("Error Message:" + ce.getMessage());} finally {if (ossClient != null) {ossClient.shutdown();}}}
    }

    如果jdk在9以上,除了添加

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

    还要添加 :

    <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. 然后在相关代码中更改自己的相关信息(如 : endpoint , accessKeyId,accessKeySecret等);

    最后运行程序,就可以在自己的Bucket中查看到上传的文件了;

  8. 案例集成OSS :

    如在新增员工的过程中,要上传图片,那么服务器端先接收上传的图片,然后通过程序将图片用OSS来存储,然后获取OSS中存储好的文件的URl,最后返回URl给前端,然后前端自动将图片展示出来。

注意 :

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

具体 :

创建一个工具类 AliOSSUtils(将相关信息更改为自己的):

package com.it.utils;
​
import com.aliyun.oss.OSS;
import com.aliyun.oss.OSSClientBuilder;
import org.springframework.stereotype.Component;
import org.springframework.web.multipart.MultipartFile;
import java.io.*;
import java.util.UUID;
​
​
@Component
public class AliOSSUtils{
​private String endpoint = "https://oss-cn-hangzhou.aliyuncs.com";private String accessKeyId = "xxxxxxx";private String accessKeySecret = "xxxxxx";private String bucketName = "xxxxxxxxxx";
​/*** 实现上传图片到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("."));
​//上传文件到 OSSOSS ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret);ossClient.putObject(bucketName, fileName, inputStream);
​//文件访问路径String url = endpoint.split("//")[0] + "//" + bucketName + "." + endpoint.split("//")[1] + "/" + fileName;
​// 关闭ossClientossClient.shutdown();return url;// 把上传到oss的路径返回}
​
}

然后在该接口中直接调用工具类中的方法即可 :

        @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);}

http://www.lryc.cn/news/217592.html

相关文章:

  • 【GitLab CI/CD、SpringBoot、Docker】GitLab CI/CD 部署SpringBoot应用,部署方式Docker
  • GitLab(2)——Docker方式安装Gitlab
  • [100天算法】-数组中的第 K 个最大元素(day 54)
  • 每日一题411数组中两个数的最大异或值(哈希表、前缀树:实现前缀树)
  • 机场运行关键指标计算规则
  • 基于元学习神经网络的类人系统泛化
  • 力扣第322题 零钱兑换 c++ java 动态规划
  • uniapp 子组件内使用定时器无法清除
  • 加载动态库的几种方式
  • 视频转序列图片:掌握技巧,轻松转换
  • python 数据挖掘库orange3 介绍
  • Android和JNI交互 : 常见的图像格式转换 : NV21、RGBA、Bitmap等
  • AndroidAuto 解决连接手机启动AA屏闪一下问题
  • jbase实现业务脚本化
  • 【安全】Java幂等性校验解决重复点击(6种实现方式)
  • 基于设深度学习的人脸性别年龄识别系统 计算机竞赛
  • 0001Java安卓程序设计-基于Android多餐厅点餐桌号后厨前台服务设计与开发
  • Node.js 中解析 HTML 的方法介绍
  • 软件开发项目文档系列之十如何撰写测试用例
  • AI:53-基于机器学习的字母识别
  • 实习记录--(海量数据如何判重?)--每天都要保持学习状态和专注的状态啊!!!---你的未来值得你去奋斗
  • 【MATLAB源码-第67期】基于麻雀搜索算法(SSA)的无人机三维地图路径规划,输出最短路径和适应度曲线。
  • Promise的并发控制 - 从普通并发池到动态并发池
  • Java类加载机制(类加载器,双亲委派模型,热部署示例)
  • 【C语言初学者周冲刺计划】3.2将一个数组中的值逆序重新存放
  • 【C++心愿便利店】No.11---C++之string语法指南
  • OpenCV检测圆(Python版本)
  • 轻量封装WebGPU渲染系统示例<15>- DrawInstance批量绘制(源码)
  • E: 仓库 “http://cn.archive.ubuntu.com/ubuntu kinetic Release” 没有 Release 文件。
  • 【VR开发】【Unity】【VRTK】3-VR项目设置