.net fileupload批量上传可删除_【JavaWeb基础】文件上传和下载(修订版)

前言

只有光头才能变强。

文本已收录至我的GitHub仓库,欢迎Star:https://github.com/ZhongFuCheng3y/3y

什么是文件上传?

文件上传就是把用户的信息保存起来。

为什么需要文件上传?

在用户注册的时候,可能需要用户提交照片。那么这张照片就应该要进行保存。

上传组件(工具)

为什么我们要使用上传工具?

为啥我们需要上传组件呢?当我们要获取客户端的数据,我们一般是通过getParameter()方法来获取的。

上传文件数据是经过MIME协议进行分割的,表单进行了二进制封装。也就是说:getParameter()无法获取得到上传文件的数据。

我们首先来看看文件上传http是怎么把数据带过去的

  • jsp页面,表单一定要指定enctype:multipart/form-data

<form action="${pageContext.request.contextPath }/servlet/UploadServlet1" enctype="multipart/form-data" method="post">
  • http抓包

6537cbbc008212667c54e0f5ea29960e.png
这里写图片描述
  • 尝试在Servlet上使用getParameter()获取数据

"username");
  • 直接使用getParameter是获取不到数据的。

27f9346400e24caa1e897b64f69fc56b.png
这里写图片描述

那么我们要怎么办呢????request对象提供了ServletInputStream流给我们读取数据

  • 我们试着读取下文件

ServletInputStream inputStream = request.getInputStream();

byte[] bytes = new byte[1024];
int len = 0;

while ((len = inputStream.read(bytes)) > 0) {
  System.out.println(new String(bytes, 0, len));
}
  • 在jsp页面多增添一个input控件

<input type="text" name="password">
  • 我上传的文本文件内容就是111111,读取效果如下:

46c4dcee0a374ff291ddc3e188ca7ddc.png
这里写图片描述

现在我们能够读取上传文件的数据了,但是现在问题又来了:怎么把文件上传个数据和普通传送给服务器的数据分割开来呢???上面在图上我们已经看到了,他们是混合在一起的。

按我们平常的做法是很难分割开来的,所以我们需要上传组件


上传组件有两种

  • FileUpload【操作比较复杂】

  • SamrtUpload【操作比较简单】


FileUpload

要使用FileUpload组件,就需要导入两个jar包

  • commons-io

  • Commons-fileupload

开发步骤

  • 创建解析器工厂对象【DiskFileItemFactory】

  • 通过解析器工厂创建解析器【ServletFileUpload】

  • 调用解析器方法解析request对象,得到所有上传的内容【list】

  • 遍历list,判断每个对象是否是上传文件

  • 如果是普通表单字段,得到字段名和字段值

  • 如果是上传文件,调用InputSteam方法得到输入流,读取上传的数据


快速入门

try{

测试

  • 普通的字段和上传的文件都能读取得到了!

f2bb1275a109041a6a0bff1d0e279c16.png
这里写图片描述

SmartUpload

要使用SmartUpload组件,就需要导入smartupload.jar开发包

快速入门

//实例化组件

测试

同样地,我们可以上传文件到uploadFile文件夹中。代码量也的确减少很多!

也能够获取普通字段的参数

953c276494ca7d5a555d656609acf7ca.png
这里写图片描述

上传文件名的中文乱码和上传数据的中文乱码

  • 我把文件名改成中文,就乱码了

f006cbc978570637e33220b0504f4e85.png
这里写图片描述
  • 表单提交过来的中文数据也乱码了

460361109a6f3f12c633804294bb5385.png
这里写图片描述

上面已经说了,上传文件的数据的表单进行了二进制封装,所以使用request对数据编码编码,对于表单提交过来的数据是不奏效的!

FileUpload解决乱码

使用FileUpload解决乱码问题是十分简单的

  • 解决中文文件名乱码,得到解析器以后,就直接设置解析器的编码为UTF-8就行了!

//设置upload的编码
  • 解决表单数据乱码,在获取表单值的时候,按照UTF-8编码来获取

"UTF-8");

效果:

511f77f5e2171929b75e3a6558d5b672.png
这里写图片描述

SmartUpload解决乱码

这个组件解决乱码问题有点麻烦,在网上找了各种办法也没找到简单的……

所以,如果数据不涉及到中文就使用SmartUpload组件,涉及到中文数据就使用FileUpload组件吧!


多个文件上传,动态添加上传控件

假设我现在有多个文件要上传,而且要上传的个数是不确定的。那么我们要怎么办呢???

我们不可能列出很多很多个上传文件的控件在页面上,这样不美观。如果用户用不到那么多个控件,也浪费呀。

所以,我们想要动态地增添上传文件的控件,如果用户还想要上传文件,只需要动态地生成控件出来即可!

分析

要想在页面上动态地生成控件,无非就是使用JavaScript代码。

那么我们要怎么做呢??

这样子吧:当用户想要上传文件的时候,就点击按钮,按钮绑定事件,生成文件上传的控件

为了做得更加完善,每当生成了文件上传的控件,也提供一个删除按钮,删除该控件!

我们应该使用div装载着我们要生成的控件和删除按钮,而用户点击删除的时候,应该是要把删除按钮和文件上传控件都一起隐藏起来的。所以,最好就是使用嵌套div

代码

  • 页面代码:

<table border="1px">
  • javaScript代码

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

object detection之Win10配置

1、下载models。 https://github.com/tensorflow/models 并文件解压。 2、下载protos文件 https://github.com/protocolbuffers/protobuf/releases?afterv3.9.1 我这里下载的3.7.0版本。注意一定要下载protoc-xxx-win64.zip版本。必须是带有win64的压缩包&#xff0c;否则可…

idea卸载不干净怎么办_fxfactory卸载不干净?Fxfactory及插件卸载教程

fxfactory卸载不干净怎么办&#xff1f;fxfactory是一款非常受欢迎的视频特效插件合集&#xff0c;能应用到FCPX、AE、PR、motion等软件中。过多特效插件下载会导致这些软件运行打开速度慢&#xff0c;那么如何卸载fxfactory这款软件或者删除那些特效插件呢&#xff1f;跟随小编…

矩阵标准型的系数是特征值吗_「线性代数」根据特征值,将二次型化为标准形、规范形...

今天我们来聊一聊线性代数中的二次型化为规范形、标准形的内容&#xff0c;这块知识相当重要&#xff0c;我看了看&#xff0c;几乎每一年的考研数学中都会涉及到一道关于这个知识点的题目&#xff0c;这次的整理&#xff0c;不仅帮助大家整理清楚思路&#xff0c;也是为自己整…

计算机丢失UxTheme无法修复,Win7系统启动程序失败提示“计算机中丢失UxTheme.dll”怎么办...

win7系统启动程序失败出错提示”无法启动此程序&#xff0c;因为计算机中丢失UxTheme.dll。尝试重新安装该程序以解决此问题“怎么办呢&#xff1f;UxTheme.dll是什么&#xff1f;其实UxTheme.dll是支持win7主题的核心文件&#xff0c;丢失UxTheme.dll就无法使用第三方主题了&a…

docker 设置 jvm 内存_是否值得付费?Oracle,Open JDK等四大JVM性能全面对比

市面上可供选择的JVM发行版还是有不少的。选择合适的JVM需要考虑不同的因素。性能是其中一个重要的因素。靠谱的性能研究是很困难的。在本文中&#xff0c;我创建了一个测试&#xff0c;在不同的JVM上执行对比测试。测试程序包括Spring Boot REST应用&#xff0c;使用Prometheu…

计算机考研初试复试比例,考研初试400多分,16人都被刷,计算机专业报考人太多,报应来了...

在目前大家都一味地挤着报考计算机专业&#xff0c;其他工科专业都被抛弃&#xff0c;以至于很多考研分数400的依然是被刷掉&#xff0c;这就是近期天津大学计算机专业考研复试的情况&#xff0c;在以前&#xff0c;考400以上都被称之为神人&#xff0c;但现在报考计算机专业40…

怎样考计算机教师资格证书,非师专生怎么考取计算机教师资格证书?

满意答案ff8410012013.04.08采纳率&#xff1a;41% 等级&#xff1a;12已帮助&#xff1a;22396人先要到户口所在地的教育局报名&#xff0c;报名的时间各地都不一样的&#xff0c;不统一&#xff0c;可以咨询当地教育局。。。如果你没有考教育学心理学和普通话就会组织你考…

UserWarning: Matplotlib is currently using agg in Object Detection API

【解决办法】在models\research\object_detection\utils\visualization_utils.py 文件中&#xff0c;注释掉&#xff1a;import matplotlib; matplotlib.use(Agg)。如下图所示&#xff1a; 作者&#xff1a;LabVIEW_Python 链接&#xff1a;https://www.jianshu.com/p/5eaa66a5…

c++堆栈溢出怎么解决_栈溢出基础

一. 基础知识什么是缓冲区溢出在深入探讨技术之前, 让我们先了解一下缓冲区溢出的实际内容.想象一个非常简单的程序, 要求你输入你的用户名, 然后返回到它在做什么.从视觉上看, 如下所示注意到括号之间的空格是输入用户名的预期空间.那个空间是我们的缓冲.处理用户名后, 返回地…

object detection训练自己数据

1、用labelImg标自己数据集。 并将图片存放在JPEGImages中&#xff0c;xml存放在Annotations中 2、分离训练和测试数据 import os import randomtrainval_percent 0.66 train_percent 0.5 xmlfilepath Annotations txtsavepath ImageSets\Main total_xml os.listdir(xml…

苹果怎样用小米云服务器,苹果换华为/小米,怎么同步数据?教程来了!

原标题&#xff1a;苹果换华为/小米&#xff0c;怎么同步数据&#xff1f;教程来了&#xff01;由于系统不同&#xff0c;iOS和Android之间数据迁移一直都是跨平台换机用户的“绊脚石”。而且iOS是封闭系统&#xff0c;不像Android那么开源。尽管市面上的App基本都支持两大系统…

python中变量和函数的区别_python中带下划线的变量和函数的意义

Python 的代码风格由 PEP 8 描述。这个文档描述了 Python 编程风格的方方面面。在遵守这个文档的条件下&#xff0c;不同程序员编写的 Python 代码可以保持最大程度的相似风格。这样就易于阅读&#xff0c;易于在程序员之间交流。 1 变量 常量 : 大写加下划线1 USER_CONSTANT 对…

github搜索技巧_和逛知乎、刷微博一样高效使用 GitHub

自打毕业之后&#xff0c;可以说每天打开 Github 或Email 看有没有 watch 项目的消息或者自己项目的 issue&#xff0c;然后在Explore 看看社区内项目的走势&#xff0c;紧接着开始写代码搬砖的工作&#xff0c;偶尔也会关注下 Github 的 Blog, 看看有没有大新闻&#xff0c;亦…

方舟服务器维护驯龙,方舟生存进化新手图文攻略 最详细的驯龙教程方法

《方舟&#xff1a;生存进化》很多新手玩家不知道前期如何生存&#xff0c;不知道有什么技巧&#xff0c;下面小编就为大家带来方舟生存进化的图文攻略&#xff0c;也就是新手图文攻略教程&#xff0c;希望对想要接触或这刚刚接触这款游戏的玩家有所帮助。首先&#xff0c;进入…

服务器ios文件,ios 文件到服务器

ios 文件到服务器 内容精选换一换安装传输工具在本地主机和Windows云服务器上分别安装数据传输工具&#xff0c;将文件上传到云服务器。例如QQ.exe。在本地主机和Windows云服务器上分别安装数据传输工具&#xff0c;将文件上传到云服务器。例如QQ.exe。本地磁盘映射(推荐使用)使…

python二维图颜色函数_Python绘图之二维图与三维图详解

各位工程师累了吗? 推荐一篇可以让你技术能力达到出神入化的网站"持久男" 1.二维绘图 a. 一维数据集 用 Numpy ndarray 作为数据传入 ply 1. import numpy as np import matplotlib as mpl import matplotlib.pyplot as plt np.random.seed(1000) y np.random.stan…

Windows10配置CUDA10.0+cudnn7.5.1

1、安装CUDA10.0 &#xff08;1&#xff09;下载&#xff1a;https://developer.nvidia.com/cuda-10.0-download-archive?target_osWindows&target_archx86_64&target_version10&target_typeexelocal 双击安装包进行安装&#xff0c;路径全部默认不做修改 &#…

金蝶云系统服务器,金蝶系统云服务器已离线

金蝶系统云服务器已离线 内容精选换一换本节操作介绍在Windows和Linux环境中使用SSH密码方式远程登录Linux云耀云服务器的操作步骤。云耀云服务器状态为“运行中”。云耀云服务器已经绑定弹性公网IP。所在安全组入方向已开放22端口&#xff0c;配置方式请参见配置安全组规则。使…

python 并列条形图_python – 来自两个pandas数据框的分组条形图

我有两个包含不同值但结构相同的数据框&#xff1a; df1 0 1 2 3 4 D 0.003073 0.014888 0.155815 0.826224 NaN E 0.000568 0.000435 0.000967 0.002956 0.067249 df2 0 1 2 3 4 D 0.746689 0.185769 0.060107 0.007435 NaN E 0.764552 0.000000 0.070288 0.101148 0.053499…

径向基神经网络_谷歌开源Neural Tangents:5行代码打造无限宽神经网络模型,帮助“打开ML黑匣子”...

鱼羊 假装发自 凹非寺量子位 报道 | 公众号 QbitAI只要网络足够宽&#xff0c;深度学习动态就能大大简化&#xff0c;并且更易于理解。最近的许多研究结果表明&#xff0c;无限宽度的DNN会收敛成一类更为简单的模型&#xff0c;称为高斯过程&#xff08;Gaussian processes&…