• 表单文件上传,ajax文件上传


    原创链接:http://www.cnblogs.com/yanqin/p/5345562.html 

    html代码  index.jsp(表单文件上传)

    <form action="shangchuan.jsp" method="post" enctype="multipart/form-data">
    		<input type="file" name="file">
    		<input type="submit" value="上传">
    	</form>
    

    java 代码 : shangchuan.jsp

    <%@page import="org.apache.struts2.json.JSONUtil"%>
    <%@page import="java.io.File"%>
    <%@page import="org.apache.commons.fileupload.FileItem"%>
    <%@page import="org.apache.commons.fileupload.servlet.ServletFileUpload"%>
    <%@page import="org.apache.commons.fileupload.FileItemFactory"%>
    <%@page import="org.apache.commons.fileupload.disk.DiskFileItemFactory"%>
    <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
    <%
    	FileItemFactory factory =  new DiskFileItemFactory();
    	ServletFileUpload upload = new ServletFileUpload(factory);
    	//设置上传文件大小
    	//long maxSize = 10 * 1024 * 1024;
    	//upload.setSizeMax(maxSize);
    	//拿到传过来的所有数据
    	List<FileItem> items = upload.parseRequest(request);
    	
    	
    	List<Map<String,Object>> maps = new ArrayList<Map<String,Object>>();
    	//设置上传文件的路径
    	String path = request.getRealPath("resource/"+"123");
    	//遍历items
    	for(FileItem item : items){
    		//判断是不是 普通表单元素
    		if(item.isFormField()){
    			/*	在form表单那里,将enctype设置成用二进制传输后,无法在用getPararmeter获得普通元素的值,要用如下方法。
    				
    				//拿到 普通表单元素的名字
    				String name = item.getFieldName();
    				//判断是不是 我要的 表单元素
    				if(name.equals("username")){
    					String value = item.getString();
    				}
    			*/
    		}else{
    			//判断是不是真的上传文件了
    			if(item.getName()=="" || item.getSize() == 0){
    				return;
    			}else{
    				//如果上传的目录不存在,就创建
    				File rootPath = new File(path);
    				if(!rootPath.exists()){
    					rootPath.mkdirs();
    				}
    				//获取上传文件的后缀
    				String fileName = item.getName();
    				String ext = getExt(fileName);
    				long fileSize = item.getSize();
    				
    				//生成文件名
    				String fname = UUID.randomUUID().toString()+ext;
    				
    				//上传文件
    				rootPath = new File(path,fname);
    				item.write(rootPath);
    				
    				//返回这次上传的相关信息
    				String fpath = "resource/"+"123";
    				Map<String,Object> map = new HashMap<String,Object>();
    				map.put("name",fileName);
    				map.put("size",fileSize);
    				map.put("sizeString", fileSize+"字节");
    				map.put("url",fpath+"/"+fname);
    				maps.add(map);
    			}
    		}
    		out.print(JSONUtil.serialize(maps));
    		
    	}
    	
    %>
    <%!
    	//根据名字 得出后缀名
    	public String getExt(String name){
    		return name.substring(name.lastIndexOf("."), name.length());
    	}
    %>
    

    html代码,index.jsp    ajax文件上传,带进度条

    <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
    <!DOCTYPE HTML>
    <html>
    <head>
    <title></title>
    <meta http-equiv="pragma" content="no-cache">
    <meta http-equiv="cache-control" content="no-cache">
    <meta http-equiv="expires" content="0">
    <meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
    <meta http-equiv="description" content="This is my page">
    <style type="text/css">
    * {
    	padding: 0;
    	margin: 0;
    }
    
    body {
    	padding: 50px;
    }
    
    .uploadbtn {
    	display: inline-block; padding : 20px 40px;
    	border: 1px solid #ccc;
    	border-radius: 4px;
    	text-decoration: none;
    	color: #666;
    	padding: 20px 40px;
    }
    </style>
    </head>
    <body>  <h1>不支持ie</h1>
    	<br />
    	<br />
    	<br />
    	<br />
    	<br />
    	<form action="shangchuan.jsp" method="post"
    		enctype="multipart/form-data">
    		<a href="javascript:void(0);" class="uploadbtn"	onclick="openFileDialog()">文件上传</a> 
    		<!-- accept="image/*"  他的作用是限制上传文件的类型 -->
    		<input type="file" name="file" id="file" onchange="uploadFile()"> <img src="" id="showimg">
    	</form>
    	<br />
    	<br />
    	<br />
    	<br />
    	<div id="listBox"></div>
    
    	<div id = "percent"></div>
    	<script type="text/javascript">
    		function openFileDialog() {
    			var ie = navigator.appName == "Microsoft Internet Explorer" ? true : false;
    			if (ie) {
    				//如果是ie
    				document.getElementById("file").click();
    			} else {
    				//自定义事件es5中的内容   
    				var a = document.createEvent("MouseEvents");
    				a.initEvent("click", true, true);
    				document.getElementById("file").dispatchEvent(a);
    			}
    		}
    
    		function uploadFile() {
    			var files = document.getElementById("file").files;
    			var file = files[0];
    			//预览上传的文件
    			showImage(file, function(data) {
    				document.getElementById("showimg").src = data;
    			})
    			
    			//html5 将文件装到表单里。
    			var form = new FormData();
    			form.append("file", file);
    			
    			//传输到服务端
    			var xhr = new XMLHttpRequest();
    			xhr.open("post", "shangchuan.jsp", true);
    			xhr.onreadystatechange = function() {
    				if (this.readyState == 4 && this.status == 200) {
    					var data = this.responseText.trim();
    					var jsonData = eval("(" + data + ")");
    					var html = "";
    					for (var i = 0; i < jsonData.length; i++) {
    						html += "<li>" + jsonData[i].name + "====="
    								+ jsonData[i].sizeString + "</li>"+"<img width='50' height='50' src='"+jsonData[i].url+"'>";
    					}
    					document.getElementById("listBox").innerHTML += html;
    				}
    			}
    			//监听上传文件的进度
    			xhr.upload.addEventListener("progress",progressFunction,false);
    			xhr.send(form);
    		}
    		
    		//进度条  这里进度条没有美化,就显示的百分比。
    		function progressFunction(evt){
    			var percent = document.getElementById("percent");
    			if(evt.lengthComputable){
    				//evt.loaded已经上传多久了,event.total:上传文件的总大小
    				var p = evt.loaded / event.total;
    				percent.innerHTML = Math.floor(p*100)+"%";
    			}
    		}
    
    		//图片预览
    		function showImage(f, callback) {
    			var reader = new FileReader();
    			reader.onload = (function(theFile) {
    				return function(e) {
    					//img
    					if (callback)callback(e.target.result);
    				};
    			})(f);
    			reader.readAsDataURL(f);
    		}
    	</script>
    </body>
    </html>
    

      

  • 相关阅读:
    npm install node-echarts npm ERR! code ELIFECYCLE
    MySql-Proxy之多路结果集归并
    Error: Cannot find module 'is-accessor-descriptor'
    如何在Node.js实现兼容ES6
    perl 自动识别编码,转换编码
    Mixin result declared without body
    Python爬虫入门教程 48-100 使用mitmdump抓取手机惠农APP-手机APP爬虫部分
    unexpected token "indent"
    Radware:上周五美国大规模DDoS攻击是如何发生的
    Radware:上周五美国大规模DDoS攻击是如何发生的
  • 原文地址:https://www.cnblogs.com/yanqin/p/5345562.html
Copyright © 2020-2023  润新知