您的位置:首页 > Web前端 > JavaScript

文件上传

2016-07-20 00:00 381 查看
摘要: 将图片等文件上传到服务器中

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的获取。之后会有一个工具类发布更改这种毛病。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  JSP 文件上传