📝 简介
文件上传,是指将本地图片、视频、音频等文件上传到服务器,供其他用户浏览或下载的过程。
🎯 实现要点
💻 前端页面
- 表单项
type="file" - 表单提交方式
post - 表单的
enctype属性multipart/form-data
🔧 后端controller类
- 使用 MultipartFile 接收文件
💡 实现方式
💾 上传到本地
常见方法
|
|
具体实现
|
|
提示
在 SpringBoot 中,文件上传,默认单个文件允许最大大小为 1M。如果需要上传大文件,可以进行在 application.yml 如下配置:
|
|
☁️ 阿里云OSS存储
📚 基本概念
- Bucket:存储空间是用户用于存储对象(Object,就是文件)的容器,所有的对象都必须隶属于某个存储空间。
- SDK:Software Development Kit 的缩写,软件开发工具包,包括辅助软件开发的依赖(jar 包)、代码示例等,都可以叫做 SDK。
🔨 具体实现
-
创建 bucket 并获取 AccessKey
-
在 pom.xml 中引入相关依赖
-
将 aliyunOSS 服务所需的相关参数写入配置文件 application.yml 中,并专门建立一个 properties 配置文件
-
将相关方法写入工具类中
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57public String upload(MultipartFile file) throws ClientException { if(file==null||file.isEmpty()){ return null; } String endpoint = aliyunOSSProperties.getEndpoint(); String bucketName = aliyunOSSProperties.getBucketName(); String region = aliyunOSSProperties.getRegion(); String accessKeyId = aliyunOSSProperties.getAccessKeyId(); String accessKeySecret = aliyunOSSProperties.getAccessKeySecret(); // 创建OSSClient实例 ClientBuilderConfiguration clientBuilderConfiguration = new ClientBuilderConfiguration(); CredentialsProvider defaultCredentialProvider = new DefaultCredentialProvider(accessKeyId, accessKeySecret); OSS ossClient= OSSClientBuilder.create() .endpoint(endpoint) .credentialsProvider(defaultCredentialProvider) .clientConfiguration(clientBuilderConfiguration) .region(region) .build(); String originalFilename = file.getOriginalFilename(); String fileName = UUID.randomUUID().toString() + originalFilename.substring(originalFilename.lastIndexOf(".")); try { InputStream fileInputStream = file.getInputStream(); ossClient.putObject(bucketName, fileName, fileInputStream); String url=endpoint.split("//")[0]+"/"+bucketName+"."+endpoint.split("//")[1]+"/"+fileName; return url; } catch (Exception e) { log.error("上传文件失败", e); throw new ClientException("上传文件失败"); } finally { ossClient.shutdown(); } } public void deleteExhibitImage(String d_url) { String endpoint = aliyunOSSProperties.getEndpoint(); String bucketName = aliyunOSSProperties.getBucketName(); String region = aliyunOSSProperties.getRegion(); String accessKeyId = aliyunOSSProperties.getAccessKeyId(); String accessKeySecret = aliyunOSSProperties.getAccessKeySecret(); String fileName=d_url.substring(d_url.lastIndexOf("/")+1);//从url中获取bucket中的文件名 // 创建OSSClient实例 ClientBuilderConfiguration clientBuilderConfiguration = new ClientBuilderConfiguration(); CredentialsProvider defaultCredentialProvider = new DefaultCredentialProvider(accessKeyId, accessKeySecret); OSS ossClient= OSSClientBuilder.create() .endpoint(endpoint) .credentialsProvider(defaultCredentialProvider) .clientConfiguration(clientBuilderConfiguration) .region(region) .build(); try { ossClient.deleteObject(bucketName, fileName); } catch (Exception e) { log.error("删除文件失败", e); } finally { ossClient.shutdown(); } }