JavaWEB基础之文件上传实现

举报
yd_273762914 发表于 2020/12/02 23:37:32 2020/12/02
【摘要】   准备:我们需要找一张绿色或者其它颜色的背景图,放在photo文件夹里就好哈,然后加jar:common-io和commo-fileupload就可以哈   创建progress.css文件:   .pro{   height:15px;   width:500px;   background: #F...

 

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

 

创建progress.css文件:

 


      .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


      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>
   

 

 


      <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


      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,就不会出现页面刷新的情况了哦!

 



文章来源: smilenicky.blog.csdn.net,作者:smileNicky,版权归原作者所有,如需转载,请联系作者。

原文链接:smilenicky.blog.csdn.net/article/details/51113823

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。