servlet实现图片的上传

2023-11-03

servlet实现图片的上传

我们通常说的上传图片,是将图片上传到服务器上面,本篇以tomcat为例,实现简单的本地图片上传服务器。

一、图片的上传需要引入两个jar包:
commons-fileupload-1.4.jar,下载地址:http://commons.apache.org/proper/commons-fileupload/;
commons-io-2.6.jar,下载地址:http://commons.apache.org/proper/commons-io/download_io.cgi;

二、视图层

在这里插入图片描述
enctype=“multipart/form-data”:表示表单提交的数据时二进制数据。
上传文件窗口的input type为“ file ”.

三、控制层

		//设置编码为utf-8
		request.setCharacterEncoding("utf-8");
		response.setCharacterEncoding("utf-8");
		response.setContentType("text/html;charset=utf-8");
		FileItemFactory factory = new DiskFileItemFactory();
		 
         // 文件上传处理器
         ServletFileUpload upload = new ServletFileUpload(factory);
 
         // 解析请求信息
         List items = null;
         try {
             items = upload.parseRequest(request);
         }
         catch (FileUploadException e) {
             e.printStackTrace();
         }
 
         // 对请求信息进行判断
         Iterator iter = items.iterator();
         while (iter.hasNext()) {
             FileItem item = (FileItem) iter.next();
             // 信息为普通的格式
             if (item.isFormField()) {
                 String fieldName = item.getFieldName();
                 String value = item.getString();
                 request.setAttribute(fieldName, value);
             }
             // 信息为文件格式
             else {
            	String fileName = item.getName();//获得上传图片的名称
                 int index = fileName.lastIndexOf("\\");
                 fileName = fileName.substring(index + 1);
                 request.setAttribute("realFileName", fileName);
                 String basePath =  request.getSession().getServletContext().getRealPath("/images");
                 System.out.println(basePath);//打印当前位置
                 File file = new File(basePath, fileName);
                 try {
                	 
                     item.write(file);
                 }
                 catch (Exception e) {
                     e.printStackTrace();
                 }
             }
            
         }

图片上传之后,存放在tomcat的文件目录下,如:F:\apache-tomcat-9.0.16\wtpwebapps\srs\images
效果图:
在这里插入图片描述

(注:srs为项目名称)

上面已经完成了图片上传的基本功能,但是由于文件存放的名字相同,当上传上一张图片后,会把之前上传的图片覆盖掉,因此,我们需要将图片的名字更改成随机数的形式,保证文件名不一样。这里我采用的是在文件名称里面加上系统时间,具体做法如下:
在这里插入图片描述

Date now = new Date();
         		 SimpleDateFormat sf = new SimpleDateFormat("yyyy_MM_dd_hh_ss_mm");
         		 String pubtime = sf.format(now);
                 String fileName = pubtime+item.getName();
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

servlet实现图片的上传 的相关文章

  • 《网络设备安装与管理》实训2(配置二层交换机、三层交换机)

    网络设备安装与管理 实训2 一 实习项目 配置交换机 包括二层交换机 三层交换机 实现不同VLAN之间的通讯 二 实习目的 1 理解多层交换机的路由原理 实现不同VLAN间通讯 采用三层交换机以及路由器设备来解决 在三层交换机上 创建各个V
  • python绘制好几个子图_python – 在matplotlib中绘制一条关联多个子图之间区域的线...

    我是一名地质学家 有一堆不同深度的钻孔 我粗略地设定了子图的数量 宽度和高度 以根据钻孔的数量和这些钻孔中的样本数量而变化 在每个钻孔中都有一个我想要突出显示的区域 我用axhspan完成了这个区域 我想做的是在钻孔 子图 之间进行关联 绘
  • SpringBoot下的定时任务调度@Scheduled,Java原生定时任务

    SpringBoot下的定时任务调度 Scheduled Java原生定时任务 一 概述 定时任务调度 一句话概括就是 基于给定的时间点 给定的时间间隔 自动执行的任务 方法 二 java生态下的定时任务实现方式 Spring 3 0以后自
  • 二分查找法

    include using namespace std include int main vector v1 1 3 4 6 10 13 14 15 17 21 容器v1 int target cin gt gt target int lo
  • 教妹学Java(十二):一文搞懂Java的所有关键字

    大家好 我是沉默王二 一个和黄家驹一样身高 和刘德华一样颜值的程序员 本篇文章通过我和三妹对话的形式来谈一谈 Java 中的关键字 教妹学 Java 没见过这么有趣的标题吧 语不惊人死不休 没错 本篇文章的标题就是这么酷炫 接受不了的同学就
  • 腾讯云服务器Ubuntu、Centos7配置为代理服务器,使用tinyproxy

    1 安装tinyproxy 1 1Ubuntu系统 apt get install tinyproxy 1 2Centos7系统 yum y install tinyproxy 2 修改tinyproxy配置 vi etc tinyprox
  • vue项目打包发布与dist瘦身

    提示 学习笔记 文章目录 前言 一 打包发布 概念介绍 目标 讲解 小结 二 打包发布 publicPath 目标 讲解 小结 三 打包发布 减少包体积 整体分析 目标 讲解 小结 四 打包发布 减少包体积 排除第三方 目标 讲解 小结 五
  • mxnet的C/C++接口编译

    mxnet的C C 接口编译 Python的版本的mxnet版本用来训练 验证及测试算法效果还比较方便 但是实际部署则需要C C 接口 因此需要编译相应接口以方便部署 一 编译环境之windows10 编译出动态库libmxnet dll
  • redis相关原理及面试官由浅到深必问的15大问题(高级)

    0 redis是什么 redis是nosql 也是个巨大的map 单线程 但是可处理1秒10w的并发 数据都在内存中 使用java对redis进行操作类似jdbc接口标准对mysql 有各类实现他的实现类 我们常用的是druid 其中对re
  • Jenkins自动化部署框架(一)邮箱设置和git介绍

    下载安装完成后 填写密码 安装推荐插件 新建管理员账户 开始使用 系统设置配置邮箱参数 选择一个项目 配置 构建后操作 Git介绍 特点 1 Git是分布式管理 服务器和客户端都有版本控制能力 都能进行代码的提交 合并 2 Git会在根目录
  • nginx部署vue项目刷新404

    测试3 location root usr local openresty nginx html test3 index index html index htm try files uri uri index html 解决页面刷新404
  • IT项目管理——07.项目成本管理

    作业1 作业2 作业3 a 成本偏差CV EV AC 10000 进度偏差SV EV PV 20000 成本绩效指数CPI EV AC 1 11 进度绩效指数SPI EV PV 0 83 b 进度绩效指数小于1 落后于进度 正的成本偏差 完
  • 04JVM_语法糖

    一 编译期处理 语法糖java编译器把 java源码编译为 class字节码的过程中 自动生成和转换的一些代码 添加的class字节码 减轻程序员的负担 1 默认构造器 默认构造器没有写任何的构造方法 但经过编译器编译成字节码过程中 会加上
  • 图像采样方法

    最邻近插值 Nearest Neighbour Resampling 这种插值方法根据源图像和目标图像之间的相对位置来将目标图像上像素确定为相对源图像上相对位置的像素值 对于任意一幅源图像来说 假设放大后目标图像的宽为Dw高为Dh 任意目标
  • 计算机网络——应用层の选择题整理

    网络应用模型 1 下面关于客户 服务器模型的描述 存在错误 a 客户端必须提前知道服务器的地址 而服务器不需要提前知道客户端的地址 b 客户端主要实现如何显示信息与收集用户的输入 而服务端主要实现数据的处理 c 浏览器显示的内容来自服务器
  • Tensorflow深度学习之二十:CIFAR-10数据集介绍

    一 CIFAR 10 CIFAR 10数据集由10类32x32的彩色图片组成 一共包含60000张图片 每一类包含6000图片 其中50000张图片作为训练集 10000张图片作为测试集 CIFAR 10数据集被划分成了5个训练的batch
  • matlab神经网络Narxnet非线性自回归神经网络

    Narxnet 非线性自回归神经网络 用法 narxnet inputDelays feedbackDelays hiddenSizes trainFcn inputDelays 输入延时 Row vector of increasing
  • 统计学习方法- 感知机

    感知机是二分类的线性分类模型 其输入为实例的特征向量 输出为实例的类别 取 1和 1二值 1 感知模型 定义 2 感知机学习策略 数据集的线性可分性 感知机学习策略是假设空间中选取使损失函数最小的模型参数w b即感知模型 3 感知机学习算法
  • android activity 切换流程

    一般来说 Android程序主压迫由下列4部分组成 Activity Broadcast Intent Receiver Service Content Provider 本文重点讲解Activity这部分内容 1 Activity基本介绍
  • Go入门教程

    什么是Go语言 Go 又称 Golang 是 Google 的 Robert Griesemer Rob Pike 及 Ken Thompson 开发的一种静态强类型 编译型语言 Go 语言语法与 C 相近 但功能上有 内存安全 GC 垃圾

随机推荐

  • 102263 - ArabellaCPC 2019(部分)解题报告

    link A Is It Easy easy include
  • 使用随机森林回归填补缺失值

    文章目录 一 概述 二 实现 1 导入需要的库 2 加载数据集 3 构造缺失值 4 使用0和均值填充缺失值 5 使用随机森林填充缺失值 6 对填充好的数据进行建模 7 评估效果对比 一 概述 现实中收集的数据 几乎不可能是完美无缺的 往往都
  • 合并两个有序数组(给定两个有序整数数组 nums1 和 nums2,将 nums2 合并到 nums1 中,使得 num1 成为一个有序数组。)

    void merge int nums1 int nums1Size int m int nums2 int nums2Size int n 定义 让数组从后往前遍历 int i m 1 int j n 1 int len m n 1 如果
  • Python中安装Beautiful Soup成功后出现No module named 'bs4'

    此篇文章主要用来解决在终端中完成了beautiful soup的成功安装 但是在IDLE中依然出现以下错误 gt gt gt from bs4 import BeautifulSoup Traceback most recent call
  • 我的大学职业规划(大一时的思考)

    我的大学职业规划 文章目录 我的大学职业规划 1 计算机科学与技术专业的发展方向 不仅限于计科 2 大学四年应该做什么 3 学校竞赛与证书考核 4 编程学习的境界 以C 举例 5 考研与就业 考公与参军的抉择 写作时间 2021 5 28
  • 学会这八个技术,你离BAT大厂不远了

    红人榜第七期来咯 本期干货 HTTP 本周最受关注的技术关键词TOP8 往下看吧 在如今这个时间和知识都是碎片化的时代 C站根据C1 C4认证的成长路径 进行知识细化整理 形成系统化的知识图谱 小编根据C1认证的成长路径整理了100篇HTT
  • Linux下Gitee的user和email配置,查看配置信息命令

    Linux下Gitee的user和email配置 查看配置信息命令 查看配置信息 git config l 配置邮箱 git config global user email email 配置用户名 git config global us
  • STM32CUBEMX配置教程(二)时钟等内部参数配置

    STM32CUBEMX配置教程 二 时钟等内部参数配置 基于STM32H743VI 使用STM32CUBEMX两年了 始终觉得这个工具非常的方便 但因为不是经常使用 导致有些要点总是会有些遗忘 因此写下这一系列教程以供记忆 顺便让我这个大萌
  • Python 打造最强表白程序(源码)

    此程序结合数据抓取 微信自动发消息 定时任务 实现一个能每天自动定时给你心爱的 ta 发送 你们相识相恋天数 情话 我爱你的图片 具体的消息如下 每天发送的消息格式如下 message 亲爱的 早上好 今天是你和 Koc 相恋的第 天 今天
  • C++性能测试工具——gperftools的安装

    一 软件安装说明 gperftools的安装有两种方式 一种是源码方式 一种是直接安装模式 这里使用源码安装模式 原因是使用直接安装模式比较简单 安装此软件需要先安装libunwind这个软件 所以这里需要通过源码方式安装libunwind
  • 【机器学习】支持向量机【上】硬间隔

    有任何的书写错误 排版错误 概念错误等 希望大家包含指正 在阅读本篇之前建议先学习 机器学习 拉格朗日对偶性 机器学习 核函数 由于字数限制 分成两篇博客 机器学习 支持向量机 上 硬间隔 机器学习 支持向量机 下 软间隔与核函数 支持向量
  • CSS布局flex布局 对齐 等分 均分 详解

    一切都始于这样一个问题 怎样通过 CSS 简单而优雅的实现水平 垂直同时居中 记得刚开始学习 CSS 的时候 看到float属性不由得感觉眼前一亮 顺理成章的联想到 Word 文档排版中用到的的左对齐 右对齐和居中对齐 然而很快就失望的发现
  • 【leetcode】1143.最长公共子序列

    leetcode 1143 最长公共子序列 题目 思路 代码 复杂度 题目 leetcode原题链接 给定两个字符串 text1 和 text2 返回这两个字符串的最长 公共子序列 的长度 如果不存在 公共子序列 返回 0 一个字符串的 子
  • 如何快速查看并定位网页元素代码

    如何快速查看并定位网页元素代码 目的 可以迅速得找出一个网页中对应元素的html代码 1 首先我们打开一个网页 比如 百度首页 2 打开后我们会看到很多的文字链接以及按钮链接 那么我们找到我们想要查看的元素的文字或者按钮 3 我们这里以 百
  • @Cacheable注解属性介绍

    本文目录 1 value cacheNames 属性 2 key属性 3 keyGenerator 属性 4 cacheManager 属性 5 cacheResolver 属性 6 condition 属性 7 unless 属性 8 s
  • C++导出EXCEL开源库xlslib库使用心得

    使用教程 第一步 下载xlslib库 本文建立在xlslib2 5 0版本基础上 下载地址xlsLib download SourceForge net 第二步 切换到解压文件目录xlslib build msvc2008 打开项目xlsl
  • linux查询jvm运行内存使用情况,在Linux下获取正在运行的JVM的总使用内存

    您可以运行 ps aux grep java 这将显示包含在其推出的字符串java的每个应用程序的内存使用情况 这应该是大多数 如果不是所有的Java应用程序 从我的服务器的输出如下 servername servername ps aux
  • 超过飞飞系列-ZYNQ之FPGA学习2.1Verilog语法

    一 VHDL Verilog C语言区别 VHDL 硬件描述语言 美军开发 相对难 不直观 需要专业培训 欧洲发展较好 Verilog 硬件描述语言 设计群体广泛 资源成熟 中国多采用 并行处理运行 C 软件语言 经过C的单片机程序需取码
  • 简单工厂(Simple Factory)

    文章目录 1 代码示例 2 简单工厂模式的定义 实现意图 工厂模式 通过把创建对象的代码包装起来 做到创建对象的代码与具体的业务逻辑代码相隔离的目的 工厂模式可以细分为 简单工厂模式 工厂方法模式 抽象工厂模式 1 代码示例 include
  • servlet实现图片的上传

    servlet实现图片的上传 我们通常说的上传图片 是将图片上传到服务器上面 本篇以tomcat为例 实现简单的本地图片上传服务器 一 图片的上传需要引入两个jar包 commons fileupload 1 4 jar 下载地址 http