JavaWeb开发——文件上传

1 简介

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

文件上传涉及到两部分:前端程序 + 服务端程序

前端程序

【三要素】:① 需要定义一个form 表单,且表单里需定义一个类型为“ file ” 的表单项;② 表单的提交方式必须为post 方式;③ 需要通过 enctype 属性来指定表单的编码格式为“ multipart/form-data”,因为普通默认的编码格式不适合传输大型的二进制数据

服务端接收文件

通过Spring提供的 API:MultipartFile 接收上传的文件,上传上来的文件是一个临时的文件,当我们文件上传这次请求响应完毕之后,该临时文件会自动删除

【注】get 是获取信息(获取),post 是负责传输信息(提交);get 在 url 后拼接,post 在数据体中发送

 MultipartFile 常用方法:

2 本地存储

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

【执行过程】通过 MultipartFile 所有的 image 信息都已经获取到,利用 image.getOriginalFilename(),就可以获取到文件的原始名,然后保存为本地磁盘中的文件名

存在问题: A用户和B用户上传同名文件,则会导致数据被覆盖

代码优化  

【注】实际项目开发过程中,本地存储的方式较为少用,原因:① 前端页面没法直接访问这些存储在本地磁盘的文件;② 磁盘容量有限;③ 磁盘损坏,则数据全部丢失

3 阿里云OSS

3.1 准备

阿里云对象存储(Object Storage Service):可通过网络随时存储和调用包括文本、图片、音频和视频等在内的各种文件

使用第三方服务器的通用思路:

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

AccessKey:包含AccessKey ID以及AccessKey Secret

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

3.2 入门

官方文档链接(也可以登录自己账号以后在后台查看SDK) :

对象存储 OSS-阿里云帮助中心 (aliyun.com)

import com.aliyun.oss.ClientException;
import com.aliyun.oss.OSS;
import com.aliyun.oss.OSSClientBuilder;
import com.aliyun.oss.OSSException;
import com.aliyun.oss.common.auth.CredentialsProviderFactory;
import com.aliyun.oss.common.auth.EnvironmentVariableCredentialsProvider;
import java.io.ByteArrayInputStream;

public class Demo {

    public static void main(String[] args) throws Exception {
        // Endpoint以华东1(杭州)为例,其它Region请按实际情况填写。
        String endpoint = "https://oss-cn-hangzhou.aliyuncs.com";
        // 从环境变量中获取访问凭证。运行本代码示例之前,请确保已设置环境变量OSS_ACCESS_KEY_ID和OSS_ACCESS_KEY_SECRET。
        EnvironmentVariableCredentialsProvider credentialsProvider = CredentialsProviderFactory.newEnvironmentVariableCredentialsProvider();
        // 填写Bucket名称,例如examplebucket。
        String bucketName = "examplebucket";
        // 填写Object完整路径,例如exampledir/exampleobject.txt。Object完整路径中不能包含Bucket名称。
        String objectName = "exampledir/exampleobject.txt";

        // 创建OSSClient实例。
        OSS ossClient = new OSSClientBuilder().build(endpoint, credentialsProvider);

        try {
            String content = "Hello OSS";
            //创建PutObject请求
            ossClient.putObject(bucketName, objectName, new ByteArrayInputStream(content.getBytes()));
        } 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 (ClientException 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();
            }
        }
    }
}

3.3 集成

在新增员工的时候,需要上传员工图片,这里一共需要做两件事:① 上传图像并进行保存;② 访问这个图像

【执行过程】在新增员工的表单录入完毕,点击保存按钮以后,表单中的所有数据(包括图像的 url )都会提交到服务端,以此来请求新增员工的接口,最终将这个员工的信息保存到员工表中。此时 emp 对象所封装的数据,既包括员工的基本信息又包括员工的图像。

集成步骤:

1、引入阿里云OSS上传文件工具类(官方文档改造)

如何通过ossutil创建Bucket并上传文件_对象存储 OSS-阿里云帮助中心 (aliyun.com)

命令行工具ossutil_对象存储 OSS-阿里云帮助中心 (aliyun.com)

【注】需要在该工具类上加入 @Component 注解,把这个工具类交给 IOC 容器管理

2、上传图片接口开发 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/171974.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Qt专栏3—Qt项目创建Hello World

setp1 打开软件 双击Qt Creator 11.0.3 (Community),打进入软件界面 step2 创建项目 点击创建项目 step3 选择模板 选着Application(Qt)->Qt Widgets Application setp4 设置项目 名称中填入项目号名,创建路径中填入项目保存位…

基于C#实现KMP算法

一、BF 算法 如果让你写字符串的模式匹配,你可能会很快的写出朴素的 bf 算法,至少问题是解决了,我想大家很清楚的知道它的时间复杂度为 O(MN),原因很简单,主串和模式串失配的时候,我…

django restful framework序列化与反序列化

在前后端分离开发中,对于RESTfulAPI设置,一般需要将查询/更新数据以JSON方式进行返回。 序列化 Model.py from django.db import models class User(models.Model):username models.CharField(verbose_name用户名,max_length10)age models.IntegerF…

服务器数据恢复—raid5上层NTFS分区误删除/格式化的数据恢复案例

NTFS是windows操作系统服务器应用最为广泛的文件系统之一。理论上,NTFS文件系统格式化操作虽然不会对数据造成太大的影响,但是有可能会出现部分文件目录结构丢失的情况。下面介绍一台服务器误操作导致raid5阵列上层的NTFS分区被格式化后如何逆向操作恢复…

Altium Designer学习笔记4

学会添加库。 元器件添加成功。 放置TYPE-C元器件。 绘制网络标识和电源端口,并且添加文字备注。 修改元器件的属性。

Hive安装配置 - 本地模式

文章目录 一、Hive运行模式二、安装配置本地模式Hive(一)安装配置MySQL1、删除系统自带的MariaDB2、上传MySQL组件到虚拟机3、在主节点上安装MySQL组件4、在主节点上配置MySQL(1)查看MySQL服务状态(2)查看M…

Softing mobiLink助力过程自动化——兼容HART、FF、PA的多协议接口工具

由于全球人口增加和气候变化等因素,“水”比以往任何时候都更具有价值。与此同时,环境法规和水处理标准也变得愈加严格。在这一大环境下,自来水公司不得不应对一些新的挑战,例如,更好地提高能源效率、最大程度地减少资…

【完全攻略】Gradio:建立机器学习网页APP

目录 前言一、Gradio介绍以及安装1-1、Gradio介绍1-2、安装 二、快速开始(初步了解)2-1、简单小栗子2-2、多输入多输出2-3、简易聊天机器人 三、关键技术3-1、带有样例的输入3-2、提示弹窗3-3、描述内容3-4、风格3-5、流式输出3-6、进度条3-7、分享APP 总…

个人如何进行深度复盘?这6大高效的复盘模型,让你的年终总结如虎添翼!

一年之计在于春,一日之计在于晨,而一年的收获与成长,在于这个年终的深度复盘。自我复盘,是对过去一年生活、工作、学习的反思和总结,能帮助我们提炼经验,发现不足,规划未来,以便更好…

利用AlphaMissense准确预测蛋白质组范围内的错义变体效应

Editor’s summary 蛋白质中单个氨基酸的变化有时影响不大,但通常会导致蛋白质折叠、活性或稳定性方面的问题。只有一小部分变体进行了实验研究,但有大量的生物序列数据适合用作机器学习方法的训练数据。程等人开发了AlphaMissense,这是一种…

动捕设备如何推动线下活动以虚拟主持人创新升级互动形式

随着元宇宙概念兴起,虚拟主持人结合全身动捕设备可以依托大屏、全息等形式直观呈现于线下活动,通过动捕设备实时驱动虚拟主持人,将现实活动场景与虚拟相连接,让活动以科技感、多元化的形式呈现,给活动参与者一种新的视…

redis之高可用

(一)redis之高可用 1、在集群当中有一个非常重要的指标,提供正常服务的时间的百分比(365天)99.9% 2、redis的高可用的含义更加广泛,正常服务是指标之一,数据容量的扩展、数据的安全性 3、在r…

基于C#实现协同推荐 SlopeOne 算法

一、概念 相信大家对如下的 Category 都很熟悉,很多网站都有类似如下的功能,“商品推荐”,"猜你喜欢“,在实体店中我们有导购来为我们服务,在网络上我们需要同样的一种替代物,如果简简单单的在数据库里面去捞&am…

【ISP】噪声--sensor(2)

1.热噪声 也叫KT/C噪声,或者叫暗电流噪声。电子的热运动的导致,温度上升,噪声增大。 2.FPN固定模式噪声 由于每个像素点的元器件制造的会有偏差,也就是这些器件的工作参数相对理论值的漂移就构成一种固定模式噪声。 3.光子散粒噪…

No appropriate protocol -- Mysql

DataGrip连接mysql报以下异常信息: javax.net.ssl.SSLHandshakeException: No appropriate protocol (protocol is disabled or cipher suites are inappropriate) The following required algorithms might be disabled: SSLv3, TLSv1, TLSv1.1, RC4, DES, MD5wi…

网站为什么一定要安装SSL证书

随着互联网的普及和发展,网络安全问题日益凸显。在这个信息爆炸的时代,保护用户隐私和数据安全已经成为各大网站和企业的首要任务。而SSL证书作为一种网络安全技术,已经成为网站必备的安全工具。那么,为什么网站一定要安装SSL证书…

C编译流程

1.预处理 hello.c 经过预处理得到 hello.i gcc -E hello.c -o hello.i -E的含义:说明这是一个预处理操作 生成预处理文件(.i) 预处理阶段做了什么事: 1.1 头文件展开 我们发现 原先只有几行的hello.c变成了上千行的hello.i 实际上 预处理完成的是 将头…

二百零五、Flume——数据流监控工具Ganglia单机版安装以及使用Ganglia监控Flume任务的数据流(附流程截图)

一、目的 Flume采集Kafka的数据流需要实时监控,这时就需要用到监控工具Ganglia 二、Ganglia简介 Ganglia 由 gmond、gmetad 和 gweb 三部分组成。 (一)第一部分:gmond gmond(Ganglia Monitoring Daemon)…

.Net6 Api Swagger配置

1、定义个Swagger版本&#xff08;组&#xff09;的枚举 namespace WebApp.Enums {/// <summary>/// api版本枚举/// </summary>public enum ApiVersion{/// <summary>/// v1版本/// </summary>v1 1,/// <summary>/// v2版本/// </summary&…

深度学习之基于Django+Tensorflow动物识别系统

欢迎大家点赞、收藏、关注、评论啦 &#xff0c;由于篇幅有限&#xff0c;只展示了部分核心代码。 文章目录 一项目简介 二、功能三、系统四. 总结 一项目简介 基于Django和TensorFlow的动物识别系统可以被设计成能够使用深度学习算法自动识别上传的图像中的动物种类&#xff…