表单文件上传,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>
表单文件上传,ajax文件上传的更多相关文章
- 【文件上传】文件上传的form表单提交方式和ajax异步上传方式对比
一.html 表单代码 …… <input type="file" class="file_one" name="offenderExcelFi ...
- html5+php实现文件的断点续传ajax异步上传
html5+php实现文件的断点续传ajax异步上传 准备知识:断点续传,既然有断,那就应该有文件分割的过程,一段一段的传.以前文件无法分割,但随着HTML5新特性的引入,类似普通字符串.数组的分割, ...
- ajax 提交所有表单内容及上传图片(文件),以及单独上传某个图片(文件)
我以演示上传图片为例子: java代码如下(前端童鞋可以直接跳过看下面的html及js): package com.vatuu.web.action; import java.io.File; imp ...
- 头像文件上传 方法一:from表单 方法二:ajax
方法一:from表单 html 设置form表单,内包含头像预览div,内包含上传文件input 设置iframe用来调用函数传参路径 <!--表单提交成功后不跳转处理页面,而是将处理数据返回给 ...
- 前台提交数据(表单数据、Json数据及上传文件)的类型
MIME (Multipurpose Internet Mail Extensions) 是描述内容类型的互联网标准.Clients use this content type or media ty ...
- Web---演示Servlet的相关类、表单多参数接收、文件上传简单入门
说明: Servlet的其他相关类: ServletConfig – 代表Servlet的初始化配置参数. ServletContext – 代表整个Web项目. ServletRequest – 代 ...
- servlet文件上传2——复合表单提交(数据获取和文件上传)
上传文件时表单enctype属性必须要更改为<enctype='multipart/form-data'>:采用post提交表单,元素需要有name属性: 利用第三方jar包(common ...
- Ajax模拟Form表单提交,含多种数据上传
---恢复内容开始--- Ajax提交表单.使用FormData提交表单数据和上传的文件(这里的后台使用C#获取,你可以使用Java一样获取) 有时候前台的数据提交到后台,不想使用form表单上传,希 ...
- spring mvc 文件上传 ajax 异步上传
异常代码: 1.the request doesn't contain a multipart/form-data or multipart/mixed stream, content type he ...
- form表单的一个页面多个上传按钮实例
/* * 图片上传 */ @RequestMapping("/uploadFile") @ResponseBody public String uploadFile(@Reques ...
随机推荐
- Android Service 服务(三)—— bindService与remoteService
(转自:http://blog.csdn.net/ithomer/article/details/7366396) 一.bindService简介 bindService是绑定Service服务, ...
- java对数组的操作
1 拷贝数组 数组全拷贝 数组定位拷贝 2 判断数组是否相等(每个元素都对应相等) 3 数组和集合的相互转化 import java.util.Arrays; import java.util.Lis ...
- lintcode-87-删除二叉查找树的节点
87-删除二叉查找树的节点 给定一棵具有不同节点值的二叉查找树,删除树中与给定值相同的节点.如果树中没有相同值的节点,就不做任何处理.你应该保证处理之后的树仍是二叉查找树. 样例 给出如下二叉查找树: ...
- JDK源码分析 – Integer
Integer类的申明 public final class Integer extends Number implements Comparable<Integer> { … } Int ...
- C - 最长公共子序列
C - 最长公共子序列 Time Limit: 1000/1000MS (C++/Others) Memory Limit: 65536/65536KB (C++/Others) Problem De ...
- ubuntu16.04 装了一天的gitlab
1.安装gitlab baidu安装完了[后续再自己写安装过程] 2.遇到的问题 访问gitlab http://ip 可以进入页面也能操作但是console报404无法加载js和css,这样很不方便 ...
- [剑指Offer] 35.数组中的逆序对
题目描述 在数组中的两个数字,如果前面一个数字大于后面的数字,则这两个数字组成一个逆序对.输入一个数组,求出这个数组中的逆序对的总数P.并将P对1000000007取模的结果输出. 即输出P%1000 ...
- 【bzoj4998】星球联盟 LCT+并查集
题目描述 在遥远的S星系中一共有N个星球,编号为1…N.其中的一些星球决定组成联盟,以方便相互间的交流.但是,组成联盟的首要条件就是交通条件.初始时,在这N个星球间有M条太空隧道.每条太空隧道连接两个 ...
- Codeforce 721C DP+DAG拓扑序
题意 在一个DAG上,从顶点1走到顶点n,路径上需要消费时间,求在限定时间内从1到n经过城市最多的一条路径 我的做法和题解差不多,不过最近可能看primer看多了,写得比较复杂和结构化 自己做了一些小 ...
- DPDK 分析
DPDK 分析 来源 https://www.cnblogs.com/bakari/p/8404650.html 高性能网络技术 随着云计算产业的异军突起,网络技术的不断创新,越来越多的网络设备基础架 ...