前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >JavaWEB+Ajax实现文件上传

JavaWEB+Ajax实现文件上传

作者头像
SmileNicky
发布于 2019-01-17 06:59:03
发布于 2019-01-17 06:59:03
2.6K00
代码可运行
举报
文章被收录于专栏:Nicky's blogNicky's blog
运行总次数:0
代码可运行

准备:我们需要找一张绿色或者其它颜色的背景图,放在photo文件夹里就好哈,然后加jar:common-io和commo-fileupload就可以哈

创建progress.css文件:

代码语言:javascript
代码运行次数:0
运行
复制
.pro{

  height:15px;

  width:500px;

  background: #FFFFF0;

  border: 1px solid #8FBC8F;

  margin: 0;

  padding: 0;

  display:none;

  position: relative;

  left:25px;

  float:left;

}

创建uploadAjax.js

代码语言:javascript
代码运行次数:0
运行
复制
function go(){
 f1.submit();
 document.getElementById("pro").style.display="block";
 document.getElementById("prop").style.display="";
 timer=setInterval("getP()",50);
  
}
 
var xmlHttpRequest;
function getP(){
  
 if(window.XmlHttpRequest){
  xmlHttpRequest=new XmlHttpRequest();
 }else{
  xmlHttpRequest=new ActiveXObject("Microsoft.XMLHTTP");
 } 
  
 xmlHttpRequest.onreadystatechange=callBack; 
 url="GetProgressServlet";
 xmlHttpRequest.open("post",url,true);
  
 xmlHttpRequest.setRequestHeader("Content-type","application/x-www-form-urlencoded");
 xmlHttpRequest.send("&timeStamp="+(new Date()).getTime()); 
  
}
//回调函数
function callBack(){
  
 if(xmlHttpRequest.readyState==4 && xmlHttpRequest.status==200){ 
   
  result=xmlHttpRequest.responseText;
  var result=result.replace(/(^\s*)|(\s*$)/g, "");
  var res=result.split(",");
  var flag=res[1]; 
  var per=parseInt(res[0]);
  var err=res[2];
  document.getElementById("imgpro").style.width=per*5+"px";
  document.getElementById("prop").innerHTML=per+"%";
  if(flag=="OK"){
   window.clearInterval(timer);
   alert("上传成功!");
   document.getElementById("pro").style.display="none";
   document.getElementById("prop").innerHTML="";
   f1.reset();
  }
  if(err!=""||err.length>0){
   window.clearInterval(timer);
   alert(err);
  }
  if(flag==null){
   window.clearInterval(timer);
  }
 }
}

调用和引入

<link rel="stylesheet" type="text/css" href="css/progress.css"> <script type="text/javascript" src="js/uploadAjax.js" charset="UTF-8"></script>

代码语言:javascript
代码运行次数:0
运行
复制
<div class="am-g">
      <div class="am-u-sm-12" align="left">
    	<div class="am-form-group">
		<form action="<%=basePath %>UploadSpotImgServlet" name="f1" id="f1" method="post" enctype="multipart/form-data" target="if">
	 		<div class="field">
                <a class="button input-file" href="javascript:void(0);">+ 浏览文件<input size="30" type="file" name="logo" data-validate="required:请选择上传文件,regexp#.+.(jpg|jpeg|png|gif)$:只能上传jpg|gif|png格式文件" /></a>
             </div>
             <br>
             <input type="reset" name="res1" value="重置"  class="am-btn am-btn-primary" />
             <input type="submit" name="but1" value="提交" onclick="go();" class="am-btn am-btn-primary" />
		</form><br>
		<div id="pro" class="pro" align="left" style="height:1px;width:600px;">
 		<img alt="" src="photo/progress.png" width="0px" id="imgpro">
		</div>
  		<span id="prop" style="width:15px;height:15px;display: none;">0%</span>
  		<br><br>
		<iframe id="if" name="if" src="" style="display: none"></iframe>
		
		
	   </div>
     </div>
   </div>

创建UploadSpotImgServlet

代码语言:javascript
代码运行次数:0
运行
复制
public class UploadSpotImgServlet extends HttpServlet {

	/**
	 * 
	 */
	private static final long serialVersionUID = 1L;

	private String fileName;
	
	private File tempFile;

	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		//设置编码格式为utf-8
		response.setContentType("text/html;charset=UTF-8");
		PrintWriter out1 = response.getWriter();
		
		request.setCharacterEncoding("UTF-8");
		//获取session,保存进度和上传结果,上传结果初始值为NOK,当为Ok表示上传完成
		HttpSession session=request.getSession();
		session.setAttribute("prog", "0");
		session.setAttribute("result", "NOK"); 
		session.setAttribute("error", "");
		String error="";
		//给上传的文件设一个最大值,这里是不得超过50MB
		int maxSize=50*1024*1024;
		//创建工厂对象和文件上传对象
		DiskFileItemFactory factory=new DiskFileItemFactory();
		ServletFileUpload upload=new ServletFileUpload(factory);
		try {
			//解析上传请求
			List items=upload.parseRequest(request);
			Iterator itr=items.iterator();
    
		   while(itr.hasNext()){
			    FileItem item=(FileItem)itr.next();
			    //判断是否为文件域
			    if(!item.isFormField()){
			     if(item.getName()!=null&&!item.getName().equals("")){
				      //获取上传文件大小和文件名称
				      long upFileSize=item.getSize();   
				      fileName=item.getName();
				      if(upFileSize>maxSize){
				       error="您上传的文件太大了,请选择不超过50MB的文件!";
				       break;
				      }
				      //此时文件暂存在服务器的内存中,构造临时对象
				      tempFile=new File(fileName);
				      //指定文件上传服务器的目录及文件名称
				      File file=new File("D:\\MyEclipse\\workspace\\TourismSystemServer\\WebRoot\\source\\images",tempFile.getName());
				      //构造输入流读文件
				      InputStream is=item.getInputStream();
				      int length=0;
				      byte[] by=new byte[1024];
				      double persent=0;
				      FileOutputStream fos=new FileOutputStream(file);
				      PrintWriter out=response.getWriter();
				      while((length=is.read(by))!=-1){
				       //计算文件进度
				       persent+=length/(double)upFileSize*100D;
				       fos.write(by, 0, length);
				       session.setAttribute("prog", Math.round(persent)+""); 
				       Thread.sleep(10);
				      }
				      fos.close();
				      Thread.sleep(1000);
			     	}else{
			     		error="没选择上传文件!";
			     	}
			    }
		   }
		   
		  Constant.ImgPath.path = "/source/images/"+tempFile.getName();
		  //System.out.println(Constant.ImgPath.path);
		   response.sendRedirect(Constant.WEB_URL_ADDSPOTINFO);
		   
		} catch (Exception e) {
			e.printStackTrace();
			error="上传文件出现错误:"+e.getMessage();
		}
		if(!error.equals("")){ 
			session.setAttribute("error", error);
		}else{
			session.setAttribute("result", "OK");
		}
		
		out1.flush();
		out1.close();
	}
 
	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		doGet(request, response);
	}
	
}

ok,这样我们就可以上传文件到我们制定的文件夹里哦,还有结合Ajax,就不会出现页面刷新的情况了哦!

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2016年04月10日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
JDK1.8下载、安装和环境配置教程
链接:https://pan.baidu.com/s/1ozCGy53AIeQIHWL6s9oAbw 提取码:04lf
全栈程序员站长
2022/07/01
4K0
JDK1.8下载、安装和环境配置教程
JDK下载与安装教程(最简单版)
http://www.oracle.com/technetwork/java/javase/downloads/index.html
全栈程序员站长
2022/09/06
1K0
JDK下载与安装教程(最简单版)
Appium系列|Appium环境搭建(一)
Appium是一种现在市面上很流行的自动化测试的工具,可以用来进行Android端、iOS端、Windows应用的自动化。对于移动端应用,它既支持应用内的操作也支持应用外的操作,同时支持webview控件内操作。它还有一个比较大的优点,就是支持主流编程语言来进行脚本编写,如Java、Ruby、Python、JavaScript等。Appium的社区也是比较活跃的,版本一直在更新中。
测试邦
2019/07/24
1.2K0
Appium系列|Appium环境搭建(一)
2020-mac 安装jdk1.8
接受协议,选择对应的Mac OS X一栏下载JDK,下载jdk必须要登录才可以下载,没有账号可以点击这里,百度网盘提取码:m3go
小黑同学
2020/08/17
8.4K0
2020-mac 安装jdk1.8
jdk1.8下载安装教程
下载后直接启动安装程序,安装路径如果不喜欢安装在C盘的可以选择其他盘符,但是一定要自己找的到安装路径。
岳泽以
2022/10/26
2.1K0
jdk1.8下载安装教程
JDK 16软件下载和安装教程
JDK 16全称Java SE Development kit(JDK),即java标准版开发包,是Oracle提供的一套用于开发java应用程序的开发包,它提供编译,运行java程序所需要的各种工具和资源,包括java编译器,java运行时环境,以及常用的java类库等。
肉肉软件安装
2022/11/01
2.3K1
JDK 16软件下载和安装教程
【JDK】jdk1.8下载与安装教程
本教程以Windows Server 2008虚拟机演示说明过程。 1、运行JDK安装包 jdk-8u181-windows-x64 2、进入开始安装向导界面,单击下一步。如图所示。 3、选择jdk安装目录。单击“下一步”。 4、开始安装,等待安装完成。 5、单击确定,继续安装。 6、默认选择,单击“下一步”。 7、等待安装完成。如图所示。 8、安装完成。点击“关闭”。接下来配置环境变量。 9、配置环境变量。打开控制面板,选择“系统和安全”,选择“系统”,选择“高级系统设置”。
宝耶需努力
2022/12/13
2.4K0
【JDK】jdk1.8下载与安装教程
SQL Server 2016软件下载和安装教程
SQL Server 2016是一款实用的系统管理工具。sql server支持更加有效的数据压缩,因此用户们都可以在这里面存储更多的数据。sql server还可以为你们增强了很多的功能而且页面的速度也将调用的更快更好。还有很方便的存储功能可以让你去进行管理和使用,性能很强结构化优秀。
肉肉软件安装
2022/12/02
8.1K1
SQL Server 2016软件下载和安装教程
JAVA_JDK下载与安装教程(小白)
第二步:安装jdk(设置三个变量【JAVA_HOME变量,CLASS_PATH变量,path变量】)
全栈程序员站长
2022/09/02
2.6K0
【2024全新保姆级教图文教程】三分钟快速安装好Anacaonda3+Pycharm运行Python
首先我们去其官网进行官方版本的相关下载,如下图所示: https://repo.anaconda.com/archive/
程序员洲洲
2024/06/07
1K0
【2024全新保姆级教图文教程】三分钟快速安装好Anacaonda3+Pycharm运行Python
HarmonyOS 分布式多端应用一站式开发平台(DevEco Studio 安装)
JDK1.8 下载 安装步骤 双击运行“jdk-8u221-windows-x64”,进入安装向导
爱吃土豆丝的打工人
2021/11/10
4970
HarmonyOS 分布式多端应用一站式开发平台(DevEco Studio 安装)
2021最新Java JDK1.8的安装教程
jdk1.8又称jdk8.0,是目前相对比较稳定的版本,不建议下载最新的jdk版本,因为最新版的jdk不稳定,在Java的学习中可能会出现各种各样的问题。
全栈程序员站长
2022/09/05
1.2K0
2021最新Java JDK1.8的安装教程
Java环境之JDK配置
特别说明:本笔记均以Win10环境为主,Win10与Win7差别不大,个别地方有Win7的单独截图和说明,小伙伴们有疑问的地方都可以在我们的QQ群中提出来,我们也会通过大家的反馈不断的完善我们的笔记和文档,如果还没加群的小伙伴快快申请入群哟!老九Java交流群QQ:643926488。配置JDK为Java编译环境,当然,大师兄早已经为大家准备好了集成JDK版的Eclipse,大家可以直接在群文件中下载安装即可使用,安装JDK环境是为了能让小伙伴们能在本地使用Java命令进行对Java文件的编译,但是有了集成版Eclipse基本不会用到,直接在Eclisp中创建和编译Java项目即可,如果小伙伴下载的Eclipse 由于系统文件缺失等不可抗因素导致无法启动,配置好JDK再重新尝试,所以,建议小伙伴们直接下载群文件中的Eclispe安装包后,也配置好JDK,Eclipse集成版安装包位置如图:
老九学堂-小师弟
2019/09/20
2.8K0
JDK 17软件下载和安装教程
JDK 17全称Java SE Development kit(JDK),即java标准版开发包,是Oracle提供的一套用于开发java应用程序的开发包,它提供编译,运行java程序所需要的各种工具和资源,包括java编译器,java运行时环境,以及常用的java类库等。
肉肉软件安装
2022/11/01
6K1
JDK 17软件下载和安装教程
java教程安装_java 安装教程
1) 新建变量名:JAVA_HOME,变量值:C:\Program Files\Java\jdk1.8.0_11
全栈程序员站长
2022/09/08
5.6K0
安卓7.0以上安装fiddler证书(模拟器)
Download Fiddler Web Debugging Tool for Free by Telerik
全栈程序员站长
2022/09/08
3K0
安卓7.0以上安装fiddler证书(模拟器)
JDK 15软件下载和安装教程
JDK 15全称Java SE Development kit(JDK),即java标准版开发包,是Oracle提供的一套用于开发java应用程序的开发包,它提供编译,运行java程序所需要的各种工具和资源,包括java编译器,java运行时环境,以及常用的java类库等。
肉肉软件安装
2022/11/01
1.1K0
JDK 15软件下载和安装教程
安装Java超详细教程
首先,当然得从官网获取JDK安装文件。很简单,只要在百度里输入“Java官网”点击百度一下,然后就会看到以下的信息,并选中红色标记的网址。 进入之后如下图,选择下载JDK 进入之后如下图,首先要在红线框中选择“Accept License Agreement”,这个是接受许可协议,不同意就没法下载了。下面是相应不同操作系统的Java版本,Linux就在Linux类型中选,Apple电脑就选择Mac OS,微软的就选择相应的Windows版本。这里还有个注意点:操作系统后面的X86,X64。X86指
程序狗
2021/09/10
9390
安装Java超详细教程
[Java笔记]-Java环境之JDK配置
【特别说明】:本笔记均以Win10环境为主,Win10与Win7差别不大,个别地方有Win7的单独截图和说明,小伙伴们有疑问的地方都可以在我们的QQ群中提出来,我们也会通过大家的反馈不断的完善我们的笔记和文档,如果还没加群的小伙伴快申请入群哟!老九Java学习交流群QQ:926936845。 配置JDK为Java编译环境 大师兄已经为大家准备好了集成JDK版的Eclipse,大家可以直接在群文件中下载安装即可使用,安装JDK环境是为了能让小伙伴们能在本地使用Java命令进行对Java文件的编译,但是有了集
老九君
2022/03/14
5100
各版本JDK(Java)安装教程,Linux/Win/MacOS
JDK下载安装与环境变量配置图文详细教程,Window、Linux和MacOS(M1)系统安装jdk教程。
zeruns
2022/01/26
4.4K0
相关推荐
JDK1.8下载、安装和环境配置教程
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验