可以做围棋习题的网站,汝阳县住房与城乡建设局建局网站,关于吃喝玩乐的网站建设策划,icp许可证个人网站JAVA后端实现文件上传,比如图片上床功能,有很多实现方案,可以将图片保存到服务器的硬盘上。也可以建立分布式集群,专门的微服务来存储文件常见的技术比如Minio。对于中小型公司#xff0c;并且上传文件私密性不高的话可以使用第三方的存储服务#xff0c;比如阿里云、华为云等…JAVA后端实现文件上传,比如图片上床功能,有很多实现方案,可以将图片保存到服务器的硬盘上。也可以建立分布式集群,专门的微服务来存储文件常见的技术比如Minio。对于中小型公司并且上传文件私密性不高的话可以使用第三方的存储服务比如阿里云、华为云等。
阿里云官网地址对象存储 OSS_云存储服务_企业数据管理_存储-阿里云阿里云对象存储 OSS 是一款海量、安全、低成本、高可靠的云存储服务提供 99.995 % 的服务可用性和多种存储类型适用于数据湖存储数据迁移企业数据管理数据处理等多种场景可对接多种计算分析平台直接进行数据处理与分析打破数据孤岛优化存储成本提升业务价值。https://www.aliyun.com/product/oss
一般入手第三方服务的学习不要通读文档可从官方的快速入门入手。将快速入门的代码粘一粘看看哪些参数不应该写死应该抽取成工具类哪些代码是核心的哪些代码可以省略debug跑一下看看各个变量的值都是什么干什么用的 利用阿里云OSS来存储文件首先要在管理控制台上Bucket列表中建立自己的存储空间Bucket填写好自己的Bucjet名称、地域等信息。并且创建好AccessKey秘钥的id和密码后续需要将Bucjet名称、地域、AccessKey秘钥的id和密码的信息写到配置yml文件中在将其注入到SpringIOC容器中。
使用阿里云Java代码编写前pom.xml中导入aliyun-sdk-oss和aliyun-java-sdk-core依赖。
代码的核心就是通过区域、密匙等信息创建ossClinet客户端上传文件根据储存地址转成输入流inputstream调用ossClient.putObject方法传入参数Bucket桶的名称、图片上传后的名称、图片输入流就可完成图片上传功能
这种像图片上传的共用的功能我们会抽取为工具类供大家使用。
Bucjet名称、地域、AccessKey秘钥的id和密码等信息为方便后续修改应将其写到配置文件中通过创建配置类将其读取在工具类中将其注入并通过Import注解将其放到IOC容器中。
oss:key: 密匙idsecret: 密匙密码都为自己创建的在官网创建时记得保存endpoint: oss-cn-beijing.aliyuncs.com 区域地址上述为北京区域bucket: 桶名字
Data
NoArgsConstructor
AllArgsConstructor
ConfigurationProperties(prefix oss)//读取配置信息
public class OssProperties {private String key; //密匙idprivate String secret;//秘钥密码private String endpoint;//区域地址private String bucket;//桶名
}
一般都可以用ConfigurationProperties这个注解来读取配置文件中的信息使用Value配合EL表达式也可做到读取配置文件中的信息但是上述更为常见简单。
紧接着抽取工具类即可工具类中注入OssProperties对象上标注Component与 Import(OssProperties.class)注解
//阿里存储工具类
Component
Import(OssProperties.class)//导入相当于将OssProperties对象放入容器
public class OssTemplate {Autowiredprivate OssProperties ossProperties;//文件上传public String upload(String fileName, InputStream inputStream) {//根据上面叙述的参数创建客户端OSS ossClient new OSSClientBuilder().build(ossProperties.getEndpoint(), ossProperties.getKey(), ossProperties.getSecret());//设置最终存储文件的路径和名称自定义的根据项目要求定义String objectName images/ new SimpleDateFormat(yyyy/MM/dd).format(new Date()) / System.currentTimeMillis() fileName.substring(fileName.lastIndexOf(.));//meta设置请求头,解决访问图片地址直接下载ObjectMetadata meta new ObjectMetadata();meta.setContentType(getContentType(fileName.substring(fileName.lastIndexOf(.))));//上传ossClient.putObject(ossProperties.getBucket(), objectName, inputStream, meta);//关闭客户端ossClient.shutdown();//可通过下述地址访问到图片,可将地址存储到数据库中return https:// ossProperties.getBucket() . ossProperties.getEndpoint() / objectName;}//文件后缀处理,比如文件叫1.jpg,下述方法抽取取得就是.jpgprivate String getContentType(String FilenameExtension) {if (FilenameExtension.equalsIgnoreCase(.bmp)) {return image/bmp;}if (FilenameExtension.equalsIgnoreCase(.gif)) {return image/gif;}if (FilenameExtension.equalsIgnoreCase(.jpeg) ||FilenameExtension.equalsIgnoreCase(.jpg) ||FilenameExtension.equalsIgnoreCase(.png)) {return image/jpg;}return image/jpg;}
}
官网快速入门中的截图: 图片上传大小默认是1M,太小了,需要修改,需修改配置文件
spring:servlet:multipart:max-request-size: 100MB # 最大请求文件大小,默认10MBmax-file-size: 10MB # 单个请求文件大小,默认1MB
最后在应用代码中,写在controller层就可不必非写到service层,调用抽取的工具类ossTemplate.upload方法就可,注意参数接收文件类型为MultipartFile。