文档章节

文件上传

残念怪蜀黍
 残念怪蜀黍
发布于 2016/07/20 16:35
字数 579
阅读 11
收藏 1

1、工程环境

JDK:1.7

Tomcat:7.0

IDE:Eclipse luna

2、如何将eclipse工程发布到tomcat

eclipse工程默认部署位置不是在tomcat目录,需要手动改回来。

解决办法:

1、将Servers中部署的工程全部清空,在add and remove里面把工程remove掉。

2、在Servers上选择右键,clean

3、在Servers上选择右键,open,就可以编辑server ltion

4、把server location 改为tomcat安装目录,即下图第2个选项

再次运行工程,发现在tomcat根目录下多了一个wtpwebapps,这个目录下就有你的工程了。

webapps:         tomcat     默认部署路径

wtpwebapps:   eclipse默认部署路径

两者同时存在,运行bin目录下的startup.bat  时,会运行wtpwebapps中部署的项目

3、下载所需的jar包

 

一、jsp文件上传需要引入Apache两个jar包

 

1、Apache Commons IO

官网地址:

http://commons.apache.org/proper/commons-io/download_io.cgi

 

2、Apache Commons FileUpload

官网地址:

http://commons.apache.org/proper/commons-fileupload/download_fileupload.cgi

 

将以上两个jar包放到web-inf下的lib中

 

 

4、上传文件的前台代码(jsp)

<form action="UploadServlet" method="post" enctype="multipart/form-data">
		<table>
			<tr>
				<td><input type="file" name="myPic"></td>
			</tr>
			<tr>
				<td><input type="text" name="picDesc"></td>
			</tr>
			<tr><td><input type="submit" value="上传"></td></tr>
		</table>
	</form>

enctype="multipart/form-data"  表示设置表单的MIME编码,用于文件上传

enctype默认是application/x-www-form-urlencoded,不能用于文件上传

 

5、上传文件的后台代码(servlet)

DiskFileItemFactory    ——FileItem对象的工厂

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

FileItem                       ——用来封装表单中的元素和数据

 

如何获取工程根目录

String rootPath=getServletContext().getContextPath();
//输出结果   /AlfCat

如何获取文件绝对路径

String realPath=getServletContext().getRealPath("uploadFile");
其中uploadFile是在工程下创建的一个文件夹,用于存放上传的文件
//输出结果:D:\apache-tomcat-7.0.37_x64\wtpwebapps\AlfCat\uploadFile

核心代码如下,写在doPost()方法里

DiskFileItemFactory factory=new DiskFileItemFactory();
ServletFileUpload upload=new ServletFileUpload(factory);
List<FileItem> itemsList=upload.parseRequest(request);
for(FileItem f:itemsList){
	if(f.isFormField()){
		//表单数据项
		String fieldName=f.getFieldName();
		String fieldValue=f.getString();
		System.out.println(fieldName);
		System.out.println(fieldValue);
	}else{
		//文件项
		String fileName=f.getName();
		InputStream in=f.getInputStream();
		OutputStream out=new FileOutputStream(new File(realPath,fileName));
		IOUtils.copy(in, out);
		in.close();    
		out.close();
	}
}

前台尽量别输入别的更多的<input />标签,会影响filedValue的获取。之后会有一个工具类发布更改这种毛病。

© 著作权归作者所有

共有 人打赏支持
上一篇: Ajax技术
残念怪蜀黍
粉丝 0
博文 11
码字总数 6423
作品 0
长春
程序员
私信 提问

暂无文章

pg_lightool基于basebackup的单表恢复和块恢复

开源软件pg_lightool,实现了基于wal日志的块恢复。详情参见博客:https://my.oschina.net/lcc1990/blog/1931485。由于wal日志中FPW的不确定性,它不能作为一个数据库恢复的解决方案。目前对...

movead
29分钟前
2
0
对比剖析Swarm Kubernetes Marathon编排引擎

Docker Native Orchestration 基本结构 Docker Engine 1.12 集成了原生的编排引擎,用以替换了之前独立的Docker Swarm项目。Docker原生集群(Swarm)同时包括了(Docker Engine \/ Daemons)...

Linux就该这么学
30分钟前
2
0
Mybatis的结果集处理

此时我们已经可以把整段的SQL语句取出,但还并没有在数据库中去执行,我们可以先来分析一下配置文件中SQL语句执行后的结果集是如何处理的。 Mybatis会将结果集按照映射配置文件中定义的映射规...

算法之名
42分钟前
23
0
Spring Boot(Spring的自动整合框架)

Spring Boot 是一套基于Spring框架的微服务框架,由于Spring是一个轻量级的企业开发框架,主要功能就是用于整合和管理其他框架,想法是将平时主流使用到的框架的整合配置预先写好,然后通过简...

花漾年华
45分钟前
2
0
Windows下条件变量的实现

条件变量是什么? 是一种同步对象。 条件变量有什么用? 用于复杂的、多线程的、多核的程序中,实现多个线程间同步任务。 条件变量与其它同步对象的区别? 与事件、互斥锁、segment等同步对象...

shzwork
47分钟前
2
1

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部