servlet实现文件上传功能

最新通知

●回复"每日一练"获取以前的题目!

●【新】Android视频更新了!(回复【安卓视频】获取下载链接)

●【新】Ajax知识点视频更新了!(回复【学习视频】获取下载链接)

●【新】HTML5知识点视频更新了!(回复【前端资料】获取下载链接)

●答案公布时间:为每期发布题目的第二天

★【新】回复“测试题”获取昨天发布的软件工程师初级阶段测试题答案

★【新】回复“学习资料”获取java学习电子文档

★【新】需要求职简历模板的可以加小编微信xxf960513

聊天系统

●我希望大家积极参与答题!有什么不懂可以加小编微信进行讨论

★珍惜每一天,拼搏每一天,专心每一天,成功每一

如果你是初学者,或者是自学者!你可以加小编微信!小编可以给你建议以及给你提供学习资料!你在学习上有什么问题都可以咨询小编!小编都会为你解答!注:本公众号纯属个人公众号!不存在任何培训机构招生信息

第一步:

1导入第三方包(commons-io-2.1.jar)(commons-fileupload-1.2.2.jar)

第二步:写好页面然后修改<form>表单enctype="multipart/form-data"属性(包含文件的表单都必须用这个属性 )

<%@ page language="java" import="java.util.*"pageEncoding="UTF-8"%>

<%

Stringpath = request.getContextPath();

StringbasePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";

%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTDHTML 4.01 Transitional//EN">

<html>

<head>

<title>文件上传</title>

<meta name="keywords"content="keyword1,keyword2,keyword3">

<meta name="description"content="this is my page">

<meta name="content-type"content="text/html; charset=UTF-8">

<!--<link rel="stylesheet"type="text/css" href="./styles.css">-->

</head>

<body>

<form action="UploadServlet"method="post" enctype="multipart/form-data">

<table width="600px">

<tr>

<td>上传者</td>

<td><input type="text"name="name"></td>

</tr>

<tr>

<td>上传文件</td>

<td><input type="file"name="myfile"></td>

</tr>

<tr>

<td colspan="2"> <input type="submit"value="上传"/></td>

</tr>

</table>

</form>

</body>

</html>


第三步:写servlet(UploadServlet.java)

packagecom.example.servlet;

importjava.io.File;

importjava.io.FileOutputStream;

importjava.io.IOException;

importjava.io.InputStream;

importjava.io.OutputStream;

importjava.io.PrintWriter;

importjava.util.List;

importjava.util.UUID;

importjavax.servlet.ServletException;

importjavax.servlet.http.HttpServlet;

importjavax.servlet.http.HttpServletRequest;

importjavax.servlet.http.HttpServletResponse;

importorg.apache.commons.fileupload.FileItem;

importorg.apache.commons.fileupload.FileUploadException;

importorg.apache.commons.fileupload.disk.DiskFileItemFactory;

importorg.apache.commons.fileupload.servlet.ServletFileUpload;

publicclass UploadServlet extends HttpServlet {

@Override

protectedvoiddoGet(HttpServletRequest req, HttpServletResponse resp)

throws ServletException, IOException {

resp.setContentType("text/html;charset=utf-8");

try {

// 创建工厂

DiskFileItemFactory factory = new DiskFileItemFactory();

File f = new File("/File");

if (!f.exists()) {

f.mkdir();

}

// 设置文件的缓存路径

factory.setRepository(f);

// 创建fileupload组件

ServletFileUpload fileUpload = new ServletFileUpload(factory);

fileUpload.setHeaderEncoding("gbk");

// 解析request

List<FileItem> fileItems =fileUpload.parseRequest(req);

PrintWriter write=resp.getWriter();

//遍历集合

for (FileItem fileItem : fileItems) {

if (fileItem.isFormField()) {//判断是否为普通字段

//获取字段名和字段值

String name=fileItem.getFieldName();

Stringvalue=fileItem.getString("gbk");

write.println("上传者:"+value);

}else{

//上传文件路径

Stringfilename=fileItem.getName();

write.println("文件来源:"+filename);

//截取文件名

filename =filename.substring(filename.lastIndexOf("\\")+1);

write.println("成功上传的文件:"+filename);

//文件名唯一

filename = UUID.randomUUID().toString()+"_"+filename;

//在服务器创建同名文件

String webPath="/File/";

Stringfilepath=getServletContext().getRealPath(webPath+filename);

//创建文件

File file = new File(filepath);

file.getParentFile().mkdirs();

file.createNewFile();

//获得上传文件流

InputStreamin=fileItem.getInputStream();

//获得写入文件流

OutputStream out=new FileOutputStream(file);

//

byte[] buffer =newbyte[1024];

int len ;

while((len = in.read(buffer))>0){

out.write(buffer,0,len);

}

//关闭流

in.close();

out.close();

//删除临时文件

fileItem.delete();

}

}

} catch (FileUploadException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

}

@Override

protectedvoiddoPost(HttpServletRequest req, HttpServletResponse resp)

throws ServletException, IOException {

doGet(req, resp);

}

}


第四步:配置web.xml

<?xml version="1.0"encoding="UTF-8"?>

<web-app version="2.5"

xmlns="http://java.sun.com/xml/ns/javaee"

xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

xsi:schemaLocation="http://java.sun.com/xml/ns/javaee

http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">

<display-name></display-name>

<servlet>

<servlet-name>UploadServlet</servlet-name>

<servlet-class>com.example.servlet.UploadServlet</servlet-class>

</servlet>

<servlet-mapping>

<servlet-name>UploadServlet</servlet-name>

<url-pattern>/UploadServlet</url-pattern>

</servlet-mapping>

<welcome-file-list>

<welcome-file>index.jsp</welcome-file>

</welcome-file-list>

</web-app>


第五步:Tomcat部署项目!运行上传文件!

第六步:上传成功!

第七步查看已经上传成功的文件:

原文发布于微信公众号 - java学习(javaxxf)

原文发表时间:2017-08-03

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏Java后端技术栈

【面试题】2018年最全Java面试通关秘籍第三套!

注:本文是从众多面试者的面试经验中整理而来,其中不少是本人出的一些题目,网络资源众多,如有雷同,纯属巧合!禁止一切形式的碰瓷行为!未经允许禁止一切形式的转载和复...

13610
来自专栏GopherCoder

『No19: Gorm 上手指南』

如果你是做后端开发的,日常工作中,除了熟悉编程语言之外,数据库怕是最常用的技术了吧。

76010
来自专栏Java技术分享

基于Metronic的Bootstrap开发框架经验总结(3)--下拉列表Select2插件的使用

在上篇《基于Metronic的Bootstrap开发框架经验总结(2)--列表分页处理和插件JSTree的使用》介绍了数据的分页处理,使用了Bootstrap ...

44590
来自专栏Java架构师历程

Struts2的工作原理

在学习struts2之前,首先我们要明白使用struts2的目的是什么?它能给我们带来什么样的好处?

10840
来自专栏c#开发者

C#开发终端式短信的原理和方法

简介   没发过短信的年轻人肯定是属于那种受保护的稀有动物,通讯发达的今天短信已经成为人们交流的重要手段,其中也蕴含着巨大的市场和经济利益,掌握短信技术的人才也...

46290
来自专栏软件工程师成长笔记

CXF实现webService服务

Web Service也叫XML Web Service,WebService是一种可以接收从Internet或者Internet上的其它系统中传递过来的请求,...

23830
来自专栏技术小讲堂

iBatis.Net(5):Data Map(了解)

总算,总算,能写点示例啦,呵呵,其实前面的几篇,我感觉自己写的也很生硬,没有Demo理解起来是很困难,很多名词,反正我初次接触iBatis的时候,是一点也不理解...

35160
来自专栏大内老A

WCF后续之旅(11): 关于并发、回调的线程关联性(Thread Affinity)

对于一般的多线程操作,比如异步地进行基于文件系统的IO操作;异步地调用Web Service;或者是异步地进行数据库访问等等,是和具体的线程无关的。也就是说,对...

19770
来自专栏互联网技术栈

Netflix Archaius 分布式配置管理依赖构件

archaius是Netflix公司开源项目之一,基于java的配置管理类库,主要用于多配置存储的动态获取。主要功能是对apache common config...

16120
来自专栏有趣的Python和你

Python数据分析之贴吧的问与答读取数据库获取question列分词词云

13330

扫码关注云+社区

领取腾讯云代金券