文件上传有SmartUpload、Apache的Commons fileupload.我们今天介绍Commons fileupload的用法。

1.commons-fileupload-1.3.1.jar

下载地址:http://pan.baidu.com/s/1kVtYMzH

2.web.xml

 <!-- 上传文件 服务器端 -->
<servlet>
<servlet-name>UploadServlet</servlet-name>
<servlet-class>com.servlet.UploadServlet</servlet-class>
<init-param>
<param-name>filePath</param-name><!-- 文件存储路径 -->
<param-value>F:\myeclipse\Workspaces\King\WebRoot\uploadfile\</param-value>
</init-param>
</servlet> <servlet-mapping>
<servlet-name>UploadServlet</servlet-name>
<url-pattern>/servlet/UploadServlet</url-pattern>
</servlet-mapping>

3.UploadFile.jsp

 <form action="servlet/UploadServlet" method="post" enctype="multipart/form-data">
<div align="center">
<fieldset style="width:80%">
<legend>上传文件</legend><br/>
<div align="left">上传文件1</div>
<div align="left">
<input type="file" name="file1"/>
</div>
<div align="left">上传文件2</div>
<div align="left">
<input type="file" name="file2"/>
</div>
<div>
<div align='left'>上传文件说明1</div>
<div align='left'><input type="text" name="description1"/></div>
</div>
<div>
<div align='left'>上传文件说明2</div>
<div align='left'><input type="text" name="description2"/></div>
</div>
<div>
<div align='left'>
<input type='submit' value="上传文件"/>
</div>
</div>
</fieldset>
</div>
</form>

4.servlet

 package com.servlet;

 import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
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.DiskFileUpload;
import org.apache.commons.fileupload.FileItem;
import org.apache.commons.fileupload.FileUploadException; import sun.swing.FilePane; public class UploadServlet extends HttpServlet { private String filePath; /**
* Destruction of the servlet. <br>
*/
public void destroy() {
super.destroy(); // Just puts "destroy" string in log
// Put your code here
} public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException { response.setCharacterEncoding("UTF-8");
response.getWriter().println("请以POST方式上传文件");
} public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
File file1 = null, file2 = null;
String description1 = null, description2 = null;
response.setCharacterEncoding("UTF-8");
request.setCharacterEncoding("UTF-8");
response.setContentType("text/html");
PrintWriter out = response.getWriter(); DiskFileUpload diskFileUpload = new DiskFileUpload();//解析request try {
List<FileItem> fileList = diskFileUpload.parseRequest(request);//将结果放置到List中
out.println("遍历所有的FileItem...</br>");
this.log("遍历所有的FileItem...");
for(FileItem fileItem : fileList){
if(fileItem.isFormField()){//如果是文本域
if("description1".equals(fileItem.getFieldName())){
out.println("遍历到description1...</br>");
description1 = new String(fileItem.getString().getBytes(),"UTF-8");
}
if("description2".equals(fileItem.getFieldName())){
out.println("遍历到description2...</br>");
description2 = new String(fileItem.getString().getBytes(),"UTF-8");
}
}else{//否则为文件域
if("file1".equals(fileItem.getFieldName())){
File remoteFile = new File(new String(fileItem.getName().getBytes(),"UTF-8"));
out.println("遍历到file1...</br>");
out.println("客户端文件位置:"+remoteFile.getAbsolutePath()+"</br>");
//服务器端文件,放在uploadfile文件夹下
file1 = new File(filePath,remoteFile.getName());
file1.getParentFile().mkdirs();//创建文件夹路径
file1.createNewFile();//创建新文件
InputStream ins = fileItem.getInputStream();//FileItem的内容
OutputStream ous = new FileOutputStream(file1);//输出到文件中
try{
byte[] buffer = new byte[1024];//字节缓存
int len = 0;//实际缓存长度
while((len=ins.read(buffer)) > -1){//循环读入缓存
ous.write(buffer,0,len);
}
out.println("已保存文件"+file1.getAbsolutePath()+"</br>");
}
finally{
ous.close();
ins.close();
}
}
if("file2".equals(fileItem.getFieldName())){
File remoteFile = new File(new String(fileItem.getName().getBytes(),"UTF-8"));
out.println("遍历到file2...</br>");
out.println("客户端文件位置:"+remoteFile.getAbsolutePath()+"</br>");
//服务器端文件,放在uploadfile文件夹下
file2 = new File(filePath,remoteFile.getName());
file2.getParentFile().mkdirs();//创建文件夹路径
file2.createNewFile();//创建新文件
InputStream ins = fileItem.getInputStream();//FileItem的内容
OutputStream ous = new FileOutputStream(file2);//输出到文件中
try{
byte[] buffer = new byte[1024];//字节缓存
int len = 0;//实际缓存长度
while((len=ins.read(buffer)) > -1){//循环读入缓存
ous.write(buffer,0,len);
}
out.println("已保存文件"+file2.getAbsolutePath()+"</br>");
}
finally{
ous.close();
ins.close();
}
}
}
}
out.println("Request 解析完毕");
} catch (FileUploadException e) {
// TODO 自动生成的 catch 块
out.println("<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\">");
out.println("<HTML>");
out.println(" <HEAD><TITLE>A Servlet</TITLE></HEAD>");
out.println(" <BODY>"); if(file1 != null){
out.println("<div>");
out.println(" <div align='left'>file1;</div>");
out.println(" <div align='left'><a href='"+request.getContextPath()+
file1.getName()+"'target=_blank>"+file1.getName()+"</a>");
out.println("</div>");
out.println("</div>");
}
if(file2 != null){
out.println("<div>");
out.println(" <div align='left'>file2;</div>");
out.println(" <div align='left'><a href='"+request.getContextPath()+
file2.getName()+"'target=_blank>"+file2.getName()+"</a>");
out.println("</div>");
out.println("</div>");
}
out.println("<div>");
out.println(" <div align='left'>description1:</div>");
out.println(" <div align='left'>");
out.println(description1);
out.println("</div>");
out.println("</div>"); out.println("<div>");
out.println(" <div align='left'>description2:</div>");
out.println(" <div align='left'>");
out.println(description2);
out.println("</div>");
out.println("</div>"); out.println(" </BODY>");
out.println("</HTML>");
out.flush();
out.close();
} } public String getServletInfo() {
return "This is my default servlet created by Eclipse";
} public void init() throws ServletException {
// Put your code here
filePath = getServletConfig().getInitParameter("filePath");
} }

6.

Java开发之文件上传的更多相关文章

  1. Java开发系列-文件上传

    概述 Java开发中文件上传的方式有很多,常见的有servlet3.0.common-fileUpload.框架.不管哪种方式,对于文件上传的本质是不变的. 文件上传的准备 文件上传需要客户端跟服务都 ...

  2. 【Java】JavaWeb文件上传和下载

    文件上传和下载在web应用中非常普遍,要在jsp环境中实现文件上传功能是非常容易的,因为网上有许多用java开发的文件上传组件,本文以commons-fileupload组件为例,为jsp应用添加文件 ...

  3. 【原创】用JAVA实现大文件上传及显示进度信息

    用JAVA实现大文件上传及显示进度信息 ---解析HTTP MultiPart协议 (本文提供全部源码下载,请访问 https://github.com/grayprince/UploadBigFil ...

  4. Java FtpClient 实现文件上传服务

    一.Ubuntu 安装 Vsftpd 服务 1.安装 sudo apt-get install vsftpd 2.添加用户(uftp) sudo useradd -d /home/uftp -s /b ...

  5. Java中实现文件上传下载的三种解决方案

    第一点:Java代码实现文件上传 FormFile file=manform.getFile(); String newfileName = null; String newpathname=null ...

  6. Java下载https文件上传到阿里云oss服务器

    Java下载https文件上传到阿里云oss服务器 今天做了一个从Https链接中下载音频并且上传到OSS服务器,记录一下希望大家也少走弯路. 一共两个类: 1 .实现自己的证书信任管理器类 /** ...

  7. java+web+大文件上传下载

    文件上传是最古老的互联网操作之一,20多年来几乎没有怎么变化,还是操作麻烦.缺乏交互.用户体验差. 一.前端代码 英国程序员Remy Sharp总结了这些新的接口 ,本文在他的基础之上,讨论在前端采用 ...

  8. Web 开发中 文件上传 是出现的:java.io.FileNotFoundException: (文件名、目录名或卷标语法不正确。)

    <span style="font-family: Arial, Helvetica, sans-serif; "> </span> <span st ...

  9. java web(四)文件上传与下载

     一.文件上传原理 1.在TCP/IP中,最早出现的文件上传机制是FTP ,它是将文件由客户端发送到服务器的标准机制:但是在jsp使用过程中不能使用FTP方法上传文件,这是由jsp运行机制所决定. 通 ...

随机推荐

  1. Remodal – 支持 Hash 追踪的响应式模态窗口

    Remodal 是一个扁平化,响应式,轻量而且容易定制的模态窗口插件,支持使用声明状态和 Hash 跟踪.您可以轻松地定义为模态弹窗定义背景景容器(如模糊效果).支持所有现代的浏览器. 您可能感兴趣的 ...

  2. IOS 局域网发送信息

    基于ios 例子WiTap 1.创建本地的服务并设置监听时间检测是否有设备连接. NSNetService * server = [[NSNetService alloc] initWithDomai ...

  3. 【web前端面试题整理01】各位加班累了吧,来做点前端面试题吧

    前言 最近小叶子有点疲惫,主要是在外地工作生活上不太适应,吃一样的东西,我居然会拉肚子,而且是一个星期一个星期的.... 脸上长了一个豆豆一个星期还没消,我那个去啊. 昨天上午上班后,本来想继续研究j ...

  4. 深入理解:JavaScript原型与继承

    深入理解:JavaScript原型与继承 看过不少书籍,不少文章,对于原型与继承的说明基本上让人不明觉厉,特别是对于习惯了面向对象编程的人来说更难理解,这里我就给大家说说我的理解. 首先JavaScr ...

  5. Linux学习心得之 jnlp的文件和java应用程序安全设置

    作者:枫雪庭 出处:http://www.cnblogs.com/FengXueTing-px/ 欢迎转载 jnlp的文件和java应用程序安全设置 1.前言2. jnlp的文件打开3.java应用程 ...

  6. eclipse出现感叹号的解决办法

    当eclipse导入项目出现红叉但无提示错误时,去看:1>菜单路径----Window/Show View/Console2>菜单路径----Window/Show View/Error ...

  7. 你真的了解UINavigationController吗?

    一:首先查看一下关于UINavigationController的定义 NS_CLASS_AVAILABLE_IOS(2_0) @interface UINavigationController : ...

  8. Markdown语法手册

    Markdown 语法手册 Markdown 是一种轻量级标记语言,能将文本换成有效的XHTML(或者HTML)文档,它的目标是实现易读易写,成为一种适用于网络的书写语言. Markdown 语法简洁 ...

  9. OC中的内存管理

    一. 基本原理 1. 什么是内存管理 移动设备的内存极其有限,每个app所能占用的内存是有限制的 当app所占用的内存较多时,系统会发出内存警告,这时得回收一些不需要再使用的内存空间.比如回收一些不需 ...

  10. WPF 使用Caliburn.Micro 多线程打开窗口

    我们都知道在WPF里面用多线程打开一个窗口很简单.如下 public void ClickMe(object sender) { Thread newWindowThread = new Thread ...