servlet上传附件代码

第三方插件完成附件上传 MultipartRequest类实现文件上传 需要二个jar包,实现附件的上传 Servlet代码 package session; import java.io.IOException; import java.util.Enumeration; import javax.servlet.ServletException; import javax.servlet.http.HttpSe... 阅读详情

------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

servlet类:

package cn.itcast.service;

import java.io.IOException;
import java.io.PrintWriter;
import java.util.List;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.apache.commons.fileupload.FileItem;
import org.apache.commons.fileupload.FileUploadException;
import org.apache.commons.fileupload.ProgressListener;
import org.apache.commons.fileupload.disk.DiskFileItemFactory;
import org.apache.commons.fileupload.servlet.ServletFileUpload;
/***
 * 通过servlet上传附件
 * @author huawei
 *
 */
public class HandleFileServlet extends HttpServlet{

 private static final long serialVersionUID = 1L;
 @Override
 protected void service(HttpServletRequest request, HttpServletResponse response)
   throws ServletException, IOException{
  request.setCharacterEncoding("UTF-8");
  response.setCharacterEncoding("UTF-8");
  
  String uri = request.getRequestURI();
  uri = uri.substring(uri.lastIndexOf("/"), uri.lastIndexOf("."));
  
  if(("/uploadfile").equals(uri)){
   //设定临时目录
   DiskFileItemFactory factory = new DiskFileItemFactory();
   //factory.setSizeThreshold(1024*1024);          //设定了1M的缓冲区,对于大文件需要通过创建临时目录来缓存
   //factory.setRepository(new File("E:/temp"));   //设置上传文件的临时目录

   //可以需要临时目录,也可以不需要
   ServletFileUpload fileUpload = new ServletFileUpload(factory);
   //限制上传文件的大小
   fileUpload.setSizeMax(10 * 1024 * 1024);
   //实现进度监听:需要实现对文件上传进度的监听,需要给FileUpload 对象添加 ProgressListener
   fileUpload.setProgressListener(new ProgressListener() {
    long num = 0;
    @Override
    public void update(long bytesRead, long contentLength, int items) {
     long progress = bytesRead*100/contentLength;
           if(progress == num)
            return;
           num = progress;
          
           System.out.println("上传进度: " + progress + "%");
           //request.getSession().setAttribute("progress", progress);
           /*try {
      response.getWriter().write("上传进度: " + progress + "%" + "<br/>");
     } catch (IOException e) {
      e.printStackTrace();
     }*/
    }
   });
   
   try {
    @SuppressWarnings("unchecked")
    List<FileItem> items = fileUpload.parseRequest(request);
    for(FileItem item : items){
     if(item.isFormField()){// 判断是普通表单文件,还是文件流文件
       System.out.println("表单参数名:" + item.getFieldName()
                              + ",表单参数值:" + item.getString("UTF-8"));
     }else{
      PrintWriter out = response.getWriter();
      if(item.getName() != null && !item.getName().equals("")){
       out.write("上传文件的大小:" + item.getSize() + "<br/>");   //上传文件的大小:33403
       out.write("上传文件的类型:" + item.getContentType() + "<br/>"); //上传文件的类型:image/x-png
       //item.getName()返回上传文件在客户端的完整路径名称
       String fileName = item.getName();
       fileName = fileName.substring(fileName.lastIndexOf("\\")+1); 
       out.write("上传文件的名称:" + fileName);       //上传文件的名称:mysql_to_java.png
      }else{
       out.write("没有选择上传文件!");
      }
     }
    }
   } catch (FileUploadException e) {
    e.printStackTrace();
   }
  }
 }
}

------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

请求的jsp文件:

<%@ page contentType="text/html; charset=utf-8" language="java" import="java.sql.*" errorPage="" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html version="-//W3C//DTD HTML 4.01 Transitional//EN">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>文件上传</title>
</head>

<body>
 <form action="servlet/uploadfile.do" enctype="multipart/form-data" method="post">
  <input type="file" value="file" name="file"/>
  <br />
  <input type="submit" value="submit" />
 </form>
</body>
</html>

-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

web.xml

<servlet>
 <servlet-name>uploadfile</servlet-name>
   <servlet-class>cn.itcast.service.HandleFileServlet</servlet-class>
  </servlet>
  <servlet-mapping>
   <servlet-name>uploadfile</servlet-name>
   <url-pattern>/servlet/uploadfile.do</url-pattern>
  </servlet-mapping>

------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

主要使用的如下:

FileItem-------DiskFileItemFactory-----ServletFileUpload

作用:
FileItem            用来封装表单中的元素和数据。

ServletFileUpload   处理表单数据,将数据封装到 FileItem 对象中。

DiskFileItemFactory FileItem 对象的工厂,可以设定缓冲区大小和存放临时文件目录。

ServletFileUpload   处理上传的文件的数据,优先保存在缓冲区,如果数据超过了缓冲区大小,则保存到硬盘上,存储在DiskFileItemFactory指定目录下的临时文件。数据都接收完后,它再在从临时文件中将数据写入到上传文件目录下的指定文件中,并删除临时文件。

------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

api:

1. DiskFileItemFactory 对象

    设置缓冲区大小,字节为单位,默认为10K,一般不用修改

    factory.setSizeThreshold(1000);

    设置临时文件存放目录

    factory.setRepository(file);

2. ServletFileUpload 对象

    判断是否为文件上传表单

    boolean b = upload.isMultipartContent(request);

解析request对象

List<FileItem> list = upload.parseRequest(request);

设置上传文件的最大值

    setFileSizeMax(long fileSizeMax)

    设置上传文件总量的最大值

    setSizeMax(long sizeMax)

    设置编码格式

    setHeaderEncoding(java.lang.String encoding)

    注册进度监听器

setProgressListener(ProgressListener pListener)

3. FileItem 对象

    获得表单字段的属性名

    item.getFieldName();

    获得普通字段的值

    item.getString(charsetName)

    获得文件上传字段的文件名

    item.getName()

    获得文件上传的流

    item.getInputStream()

 

机器学习发展历史及现状(重要的期刊,会议,大牛总结) 1 引言 机器学习是指通过计算机学习数据中的内在规律性信息,获得新的经验和知识,以提高计算机的智能性,使计算机能够像人那样去决策。随着各行业对数据的需求量增多,对处理和分析数据的效率要求变高,一系列机器学习算法应运而生。机器学习算法主要是指通过数学及统计方法求解最优化问题的步骤和过程。针对不同的数据和不同模型需求,选择和使用适当的的机器学习算法可以更高效地解决一些实际问题。本文将从机器学习的起源... 阅读详情

相关推荐

【ESP32开发】——开发环境搭建(VSCode+PlatformIO)

本章内容主要介绍ESP32的开发环境搭建(基于VSCode+PlatformIO)的流程与相应的注意事项,避免开发ESP32止于环境搭建!在项目的维护过程中,可以更好地管理和更新代码、调试问题,并且能够快速适应和采用新的功能、库或硬件平台。:VSCode 的代码提示和自动补全功能,以及 PlatformIO 的管理工具,都能帮助你编写规范、格式良好且易于阅读的代码。:Arduino 框架是一种简单、易用的嵌入式开发框架,适用于快速原型开发和小型项目。需要选择对应自己开发的开发板型号。

m0_61934621的博客 8415

servlet+uploadify+commons-fileupload实现文件上传

先吐槽一下使用那些没有完整API的jar包,一步一个坑,网上很多代码都是有bug的,拿来主义+清除bug!   1.commons-fileupload.jar在servlet中用来处理文件上传,比较简便,(尼玛,早知道用struts了,自己写一大堆什么获取参数,倒腾了好久,struts一个file映射,轻松搞定文件上传啊,为了用servlet实现,倒腾了一晚上。)主要注意在servlet中如何

凡事预则立,不预则废 756

vivado实现SDI接口

XAPP1249,用来介绍UHD_SDI的实现。

Huskar_Liu的博客 7076

Servlet-文件的上传和下载

Servlet的上传前端页面后端代码Servlet文件的下载前端代码后端代码 Servlet的上传 前端页面 注意点:文件上传的方式必须是post请求,必须为文件框添加属性:enctype=“multipart/form-data” <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>文件上传</title> </head&g.

weixin_44342481的博客 313

PC网站实现微信扫码登录功能(二)

上篇我们介绍了怎么申请账号以及最后拿到appId和appSecret,如果有不清楚的可以看一下 PC网站实现微信扫码登录功能(一) 下面我就来说一下怎样在PC端怎么实现扫码登录功能。 一、进入官方文档网站 https://developers.weixin.qq.com/doc/oplatform/Website_App/WeChat_Login/Wechat_Login.html 其实官网对过程描述的已经非常细致了。并且提供了两种扫码方式。一种是跳转二维码扫描页面,另一种是内嵌式二维码。大家可以

qq_35771266的博客 3万+

IC设计新手必看:如何正确使用去耦电容(decap)避免电源噪声?

本文深入探讨了IC设计中去耦电容(decap)的应用技巧,从核心原理到布局实现,帮助新手工程师有效抑制电源噪声。文章详细解析了MIM、MOM等电容类型的特性与选择策略,并提供了先进的布局技巧和验证方法,特别适用于28nm以下先进工艺的电路设计挑战。

weixin_30555125的博客 114

上传文件导致OOM

背景:使用hutool工具进行文件上传。 直接上代码: <dependency> <groupId>cn.hutool</groupId> <artifactId>hutool-all</artifactId> <version>5.1.0</version> </dependency> import cn.hutool.http.HttpRequest

u013813491的专栏 3086

华为灵衢UB总线介绍

华为发布"灵衢"(UB)超节点互联协议,旨在构建支持AI大模型计算的基础设施。该协议采用统一内存语义和对等架构,使设备可直接访问远程内存,实现资源池化。技术突破包括2.1微秒超低时延和TB级带宽,支持64节点、52万张昇腾卡的集群互联。相比传统RDMA,"灵衢"更注重系统级资源调度,而非单纯数据传输。华为开放技术规范,推动生态建设,已有厂商开发兼容IP核。"灵衢"可适应x86、RISC-V等架构,未来将扩展至百万卡规模集群。

技术引领业务创新 4423

java异常_异常、堆内存溢出、OOM的常见情况及解决方案

堆内存溢出【情况一】:java.lang.OutOfMemoryError: Java heap space:这种是java堆内存不够,一个原因是真不够,另一个原因是程序中有死循环;如果是java堆内存不够的话,可以通过调整JVM下面的配置来解决:< jvm-arg>-Xms3062m < / jvm-arg>< jvm-arg>-Xmx3062m < /...

weixin_39628594的博客 626

Unity热更实战:用YooAsset+HybridCLR实现小游戏资源与代码双更新(含避坑清单)

本文详细介绍了Unity小游戏开发中如何通过YooAsset与HybridCLR实现资源与代码双热更新方案。内容涵盖环境配置、架构设计、微信小游戏专项优化、热更代码工程化实践及真机调试技巧,帮助开发者解决审核周期长、紧急修复等痛点,提升更新效率与稳定性。

weixin_42520025的博客 501

【STM32Cube HAL】输入捕获(六)——PWM测量

实验内容:使用通用定时器输入捕获测量信号的脉宽(检测按键按下的时间)。 一、原理图 二、 CubeMX配置 Step1.打开 STM32CubeMX,点击“New Project”,选择芯片型号,STM32F103VETx。 Step2.选择时钟源,并配置时钟树。选择Crystal/Ceramic Resonator,并配置系统时钟为72M。 Step3.配置SYS,我们这里选择的是Serial Wire。(正常情况配置不配置不影响,debug可以使用。但是你不可以把这...

HAHAHA 1万+

servlet实现上传附件

一、简单介绍 使用 Servlet上传附件 原理上还是蛮简单的,首先获取上传的附件对象,然后做一些简单处理 后写入到指定路径的磁盘中。 二、准备条件 common-io.jar ,下载地址:http://commons.apache.org/io/download_io.cgi common-upload.jar ,下载地址:http://jakarta.apache.org/commons/f...

人生若只如初见的博客 747

Python 爬虫实战:Twitter 数据定向抓取(特定话题 + 用户推文爬取与分析)

在社交媒体研究、舆情监测和市场分析等领域,Twitter 数据具有极高的价值。本文将详细介绍如何使用 Python 构建一个完整的 Twitter 数据爬取系统,包括特定话题和用户推文的爬取与分析。我们将涵盖从认证到数据存储、清洗、分析和可视化的全流程。

u014481728的博客 1038

java fileupload上传附件到服务器,可携带参数(简单易用)可跨域,看这篇就够了

一个很简单实用的上传附件实例 首先主要用到的包: 先看服务端代码,我这里是用了Servlet,在web.xml配置 <servlet> <servlet-class>com.file.FileEntryServlet</servlet-class> <servlet-name>FileServlet</servlet-name> </servlet> <servlet-ma.

编程界明世隐的博客 2175

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

关于JSP/Servlet文件上传与下载

最近Java项目上有个文件上传的功能需求,当然有上传就存在对应的下载需求。由于项目的框架由前辈搭建好了,对于功能上的需求就直接往框架中添加模块,完全采用CTRL+C/V的方式在已有的代码上做相应的修改,没撒技术含量,就这个小的功能需求对于目前这种景况也算是一个插曲 – 需要自己实现。 通过多天的代码编写与测试,终于完成对上传/下载的实现,先将其过程详细记录,以备后续总结。 ...

weixin_33692284的博客 156

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

SWFUpload+COS 上传组件+servelet 实现大附件上传

去年的时候整理过例子,源地址我的iteye bolg: http://blog.youkuaiyun.com/misswuyang/article/details/5412375 这几天一直在整理一些以前的例子,并且优化了一下,也改写了一些swfupload 的源码,使其适应项目的开发。 新版本在线预览地址:http://220.178.14.19:8081/...

编程资料大全 172

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

nc/ncc 接口集成 附件上传下载

【代码】nc/ncc 接口集成 附件上传下载。

xiaofei_32的博客 1559

图片的上传

1:使用apache的插件:commons-fileupload.jar实现附件的上传 2:编写页面:upload.jsp 3:编写上传附件servlet:PicUploadServlet.java 4:配置web.xml upload.jsp <%@ page language="java" contentType="text/html; charset=UTF-8" p

kandy的专栏 581

Java 文件上传与下载、email

1. 文件上传与下载 1.1 文件上传 文件上传,要点: 前台: 1. 提交方式:post 2. 表单中有文件上传的表单项: ”file” /> 3. 指定表单类型: 默认类型:enctype="application/x-www-form-urlencoded" 文件上传类型:multipart/form-data 手动实现文件上传     "frm_test" action="${p

BurningMyself 1万+

javaWeb中文件上传

新建一个jsp: &lt;%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%&gt; &lt;!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/htm

QQ:690217293 135

uploadify 302 java_uploadify3.2基于javaSSh框架jsp页面的整合

最近做毕业设计——oa系统,在邮箱这块用到了附件上传。在度娘找了好多jquery的控件,最终选择了uploadify。首先去官网下载uploadify ——http://www.uploadify.com/(选择falsh版本,html5是付费服务).解压后可以看到项目构建图2 导入包编写jsp页面代码$(function() {$('#file_upload').uploadify({ ...

weixin_39611930的博客 152

JavaWeb的文件上传与下载

目录:一、文件的上传1、文件上传时发送的http内容2、使用第三方的 API(1)导入两个jar包(2)常用的类有哪些3、fileupload 类库的使用(1)上传文件的表单:(2)解析上传的数据的代码:二、文件的下载三、附件中文名乱码问题解决方案1、方案一2、方案二3、方案一二整合 一、文件的上传 1、要有一个 form 标签,method=post 请求 2、form 标签的 encType 属性值必须为 multipart/form-data 值 3、在 form 标签中使用 input type=f

azhu12138的博客 249

在低开上传附件组件中,调整300m之后,却只能上传100m以下,超过就报错

1、后端配置需调整文件上传大小限制,例:afc 下 application.properties,在低开上传附件组件中,调整300m之后,却只能上传100m以下,超过就报错。2、数据库也需调整,例:mysql。# 允许传送最大数据包大小。

py_doc的博客 251

JavaWeb之文件上传、下载以及邮件的发送

上传文件的要求 表单的要求 1.表单的提交方式必须为POST方式 2.必须添加表单的另一属性enctype=”multipart/form-data” Servlet的要求 1.若表单中加属性enctype,则在Servlet无法使用req.getParameter(“xxx”)方法,任何表单项都会返回null。 2.在Servlet提供了另外一种获取表单数据的方法req.getI...

Bobo‘s Home 928

JavaWeb中文件的上传

1.文件的上传 文件的上传和下载,是非常常见的功能。很多的系统中,或者软件中都经常使用文件的上传和下载。 比如:QQ 头像,就使用了上传。 邮箱中也有附件的上传和下载功能。 OA 系统中审批有附件材料的上传 文件的上传介绍(*****重点) 1、要有一个 form 标签,method=post 请求 2、form 标签的 encType 属性值必须为 multipart/form-data 值 3、在 form 标签中使用 input type=file 添加上传的文件 4、编写服务器代码(Servlet

qq_45554909的博客 297

使用jQuery+SWFUpload+Commons-FileUpload实现带进度条的上传

  注:摘自http://theoffspring.iteye.com/blog/1480092,这里只是做个备份,供自己学习使用!   这两天在找一个可以实现上传时显示进度的ajax库,看了很多10 best ajax uploader之类的文章,发现里面很多链接都点不进去,或者网站文档和demo做得很烂,我这人选开源软件用,一定会看他的文档做得怎么样,做得不全就懒得研究了,swfuplo...

hf312350968的专栏 195
上一篇: 用数组实现Map功能
下一篇: java多线程下载
beyond0851
博客等级 码龄15年 18粉丝 37原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值