笔记
文件上传
-
文件上传是指将本地图片,视频,音频等文件上传到服务器,供其它用户浏览或下载的过程
-
文件上传前端三要素 :
-
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中存储文件;
-
第三方服务的通用思路:
-
准备工作
-
参照官方SDk编写入门程序
-
集成使用
注意 :
-
SDk :Software Development Kit的缩写,软件开发工具包,包括辅助软件开发工具包(jar包),代码示例等,都可以叫做SDk;
阿里云OSS - 使用步骤
-
注册阿里云(实名认证)
-
充值
-
开通对象存储服务(OSS):
-
点击右上角的控制台。
-
将鼠标移至左上角三条横线处,在显示界面中单击对象存储OSS。
-
然后点击开通
-
-
创建bucket : 直接点击左上角的新建Bucket,然后其它不用改,取一个唯一的name,然后将读写权限改为公共读。
-
获取AccessKey : 注意保存AccessKey和Secret
-
参照官方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 { @Test public 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>
-
然后在相关代码中更改自己的相关信息(如 : endpoint , accessKeyId,accessKeySecret等);
最后运行程序,就可以在自己的Bucket中查看到上传的文件了;
-
案例集成OSS :
如在新增员工的过程中,要上传图片,那么服务器端先接收上传的图片,然后通过程序将图片用OSS来存储,然后获取OSS中存储好的文件的URl,最后返回URl给前端,然后前端自动将图片展示出来。
注意 :
-
Bucket : 存储空间是用户用于存储对象(Object,就是文件)的容器,所有对象都必须隶属于某个存储空间。
具体 :
创建一个工具类 AliOSSUtils(将相关信息更改为自己的):文章来源:https://www.toymoban.com/news/detail-743400.html
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("."));
//上传文件到 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();
return url;// 把上传到oss的路径返回
}
}
然后在该接口中直接调用工具类中的方法即可 :文章来源地址https://www.toymoban.com/news/detail-743400.html
@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);
}
到了这里,关于文件上传学习笔记的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!