fileupload学到的东西---一次文件上传项目经历

首先是对HTTP进行文件上传的了解:


function ajaxFileUpload()
	{
		var file = document.getElementById("file1").files[0];
		var data = new FormData();
	    data.append('file1', file);
	    
		$.ajax({url:"upload.action",
			processData: false,
			contentType: false,
			cache: false,
			async:true,
			type:"POST",
			data:data
		});
	}
从这段Jquery ajax中可以看出,在使用ajax()方式上传文件时,需要取消浏览器对传输文件的自动处理以及对内容的处理,而使用form自带的处理方式。

因为正常情况下发送Http消息浏览器会自动对其进行相应的处理,而文件上传是需要用特殊的方式的,enctype="multipart/form-data" ←

只有把这两个都设为false才可以让文件流传输到后台

processData: false,
contentType: false,


接下来是第二段Ajax


function getPro()
	{
		var int=self.setInterval("progress()",1000)
		function progress()
		  {
		  	getP();
		  }
	}
       function getP()
	  {
		$.ajax({
			url:"progress.action",
			type:"GET",
			cache: false,
			async:false,
			dataType: "text",
			success:function (data)
			{
				document.getElementById("pro").value = data;
			}
		})
	  }

getP是单一的一条请求获取进度,getPro是对这条请求进行轮询。使用的是setInterval方法。

这段中最主要的是getP()中的ajax方法。

这个ajax是访问进度条servlet,因为一个servlet处理传输时,需要靠另外一个servlet返回进度条数据,因为文件传输的那个servlet是无法在文件未传输成功前返回数据的。

也就是说,response一旦返回数据,则请求无法继续,所以要另开一个servlet。

所以异步上传并显示进度条的话,也要开两个ajax、

另外要关注的就是,如果servlet返回的是String的话,那么,ajax的dataType要指定为"text",

如果servlet返回Json的话,那么dataType:"json"



======================================================


前台传输数据到后台→http方式get/post(...),后台拿到数据,两个servlet传递数据用session,作用域是会话级别的,request的话另一个ajax会访问不到。

servlet返回数据可以用response.getWriter().print();直接输出。或者 response.sendRedirect跳转页面,又或者通过request   redirect/forword跳转到新的页面


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值