html5 最新的拖拽上传 网上的例子也不少,但是本人没看到什么特别全面的,所以特地在这里把前台和后台代码全部贴上,望还没实现的人今早实现。
代码如下:
前台的jsp如下:
<%@ page language="java" pageEncoding="UTF-8"%>
<%@ page isELIgnored="false"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn"%>
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>
<%
String path = request.getContextPath();
String basePath = request.getScheme() + "://" + request.getServerName() + ":" + request.getServerPort()+ path + "/";
%>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>我的webQQ</title>
<base href="<%=basePath%>"/>
<script type="text/javascript" src="<%=basePath%>js/jquery-1.6.1.min.js"></script>
<script language="JavaScript" type="text/JavaScript">
$(function(){
if (window.FileReader) {
var file ;
var list = document.getElementById('list'),
cnt = document.getElementById('container'),
btn = document.getElementById("upLoadbtn");
// 判断是否图片
function isImage(type) {
switch (type) {
case 'image/jpeg':
case 'image/png':
case 'image/gif':
case 'image/bmp':
case 'image/jpg':
return true;
default:
return false;
}
}
function looks(f,img){
list.innerHTML += '<li><strong>' + f.name + '</strong> - ' + f.size + ' bytes<p>' + img + '</p></li>';
cnt.innerHTML = img;
}
// 处理拖放文件列表
function handleFileSelect(evt) {
evt.stopPropagation();
evt.preventDefault();
var files = evt.dataTransfer.files;
for (var i = 0, f; f = files[i]; i++) {
var t = f.type ? f.type : 'n/a';
reader = new FileReader();
isImg = isImage(t);
// 处理得到的图片
if (isImg) {
reader.onload = (function (theFile) {
return function (e) {
img = '<img class="preview" src="' + e.target.result + '" title="' + theFile.name + '"/>';
looks(theFile, img);
file=theFile;
};
})(f);
reader.readAsDataURL(f);
} else {
img = '"o((>ω< ))o",你传进来的不是图片!!';
looks(f, img);
}
}
}
// 处理插入拖出效果
function handleDragEnter(evt){ this.setAttribute('style', 'border-style:dashed;'); }
function handleDragLeave(evt){ this.setAttribute('style', ''); }
// 处理文件拖入事件,防止浏览器默认事件带来的重定向
function handleDragOver(evt) {
evt.stopPropagation();
evt.preventDefault();
}
cnt.addEventListener('dragenter', handleDragEnter, false);
cnt.addEventListener('dragover', handleDragOver, false);
cnt.addEventListener('drop', handleFileSelect, false);
cnt.addEventListener('dragleave', handleDragLeave, false);
function upload(){
var container = document.getElementById('container');
/**
//获取分割线
var boundary="----------BOUNDARY"+(new Date()).getTime();
//新建文件读取
var fileReader = new FileReader();
//读取文件
fileReader.readAsBinaryString(file);
var fileData = fileReader.result;
//拼接body
var body = '';
body += "--" + boundary + "\r\n";
body += "Content-Disposition: form-data; name=\"image\"; filename=\"" + file.name + "\"\r\n";
body += "Content-Type: "+file.type+"\r\n\r\n";
body += fileData + "\r\n";
body += "--" + boundary + "--\r\n";
//开始异步请求
var xhr = new XMLHttpRequest();
xhr.open('POST', "test/upload.html", true);
xhr.setRequestHeader('content-type', "multipart/form-data, boundary="+boundary);
xhr.setRequestHeader("Content-Length",file.size);
alert(body);
xhr.sendAsBinary(body);
*/
var xhr = new XMLHttpRequest();
xhr.open('post', "test/upload.html", true);
xhr.setRequestHeader("X-Requested-With", "XMLHttpRequest");
var fd = new FormData();
fd.append('name', file.name);
// Add file data
fd.append('file', file);
// Send data
xhr.send(fd);
/**
xhr.onload = function() {
alert("onload");
};
xhr.onerror = function() {
//alert(this.responseText);
};
xhr.upload.onprogress = function(event) {
//alert("onprogress");
};
xhr.upload.onloadstart = function(event) {
//alert("start");
};
// prepare FormData
var formData = new FormData();
formData.append('myfile', file);
xhr.send(formData);
*/
}
btn.addEventListener('click',upload,false);
} else {
document.getElementById('section').innerHTML = '你的浏览器不支持啊,同学';
}
});
</script>
<style>
#section{font-family: "Georgia", "微软雅黑", "华文中宋";}
.container{display:inline-block;min-height:200px;min-width:360px;color:#f30;padding:30px;border:3px solid #ddd;-moz-border-radius:10px;-webkit-border-radius:10px;border-radius:10px;}
.preview{max-width:360px;}
#files-list{position:absolute;top:0;left:500px;}
#list{width:460px;}
#list .preview{max-width:250px;}
#list p{color:#888;font-size:12px;}
#list .green{color:#09c;}
</style>
</head>
<body>
<div id="section">
<p>把你的图片拖到下面的容器内:</p>
<div id="container" class="container">
</div>
<div id ="files-list">
<p>已经拖进过来的文件:</p>
<ul id="list"></ul>
</div>
<input type="button" value = "确认上传" id="upLoadbtn" "/>
</div>
</body>
</html>
后台的java代码如下:
/**
*
* @author 程欣伟
* 图片上传
* @param request
*/
@RequestMapping("upload.html")
public void upload(HttpServletRequest request) {
try {
MultipartHttpServletRequest multipartRequest = (MultipartHttpServletRequest) request;
//获取文件map信息
Map<String,MultipartFile> fileMap = multipartRequest.getFileMap();
//迭代map
Iterator<Entry<String,MultipartFile>> iterator = fileMap.entrySet().iterator();
while(iterator.hasNext()){
Map.Entry<String,MultipartFile> entry = iterator.next();
//获取文件信息
MultipartFile value = entry.getValue();
//获取文件大小
Long size = value.getSize();
//获取文件名字
String fileName = value.getOriginalFilename();
//获取后缀名
String houzhuiName = fileName.substring(fileName.lastIndexOf('.')+1,fileName.length());
BufferedOutputStream out = null;
BufferedInputStream in = null;
//获取文件字节数组
byte[] b = value.getBytes();
try {
String filename = UUID.randomUUID().toString(); // 重命名文件
String dir = "d:/image/";
File file = new File(dir);
if(!file.exists()){
file.mkdir();
}
String filepathString = dir+filename+"."+houzhuiName;
//吧字节数组 写入
out = new BufferedOutputStream(new FileOutputStream(filepathString, true));
out.write(b, 0, b.length);
} catch (Exception ex) {
// TODO: handle exception
} finally {
if (out != null) {
out.close();
}
if (in != null) {
in.close();
}
}
}
} catch (Exception ex) {
ex.printStackTrace();
}
}
分享到:
相关推荐
【ASP使用JQuery.Uploadify实现文件上传详解】 在Web开发中,文件上传功能是不可或缺的一部分。JQuery.Uploadify是一款基于jQuery的文件上传插件,它提供了丰富的自定义选项和友好的用户界面,使得文件上传变得简单...
1. **插入图片**:FCKeditor 支持直接在编辑器内上传图片。用户可以通过点击“插入”菜单中的“图像”选项,选择本地图片上传。为了实现这个功能,你需要配置图片上传的相关设置,包括上传路径、文件类型限制等。 2...
- **王家林老师**:资深Android架构师,拥有多年Android系统开发及企业级培训经验,精通Android、HTML5、Hadoop等领域。 通过以上知识点的学习,学员不仅能够快速掌握Android应用开发的核心技能,还能够获得宝贵的...
例如,你可能想要添加图片上传功能,可以通过创建一个插件实现,使用户可以直接在编辑器中上传并插入图片。 ### 6. 兼容性和性能优化 尽管FCKeditor在多种浏览器上表现良好,但仍然需要关注兼容性问题,特别是对于...
**FCKeditor v2.6.3 知识点详解** FCKeditor 是一款历史悠久的开源富文本编辑器,主要用于Web应用中,提供用户在网页上进行格式化文本的编辑功能,类似于桌面环境下常见的文字处理软件。FCKeditor v2.6.3是其在2008...
4. **文件操作**:可能涉及到上传用户图片、下载食谱文档等,需要掌握PHP的文件系统函数。 5. **会话管理**:使用session或cookie来实现用户登录状态的跟踪。 6. **错误与异常处理**:良好的错误处理机制能确保程序...
4. **MVC范例与角色划分**:在MVC应用中,常见的角色包括开发者、设计师和数据库管理员。开发者编写模型和控制器,设计师负责视图的设计,而数据库管理员管理数据存储。 5. **HTTP方法**:用于在URL中提交数据的...
4. **图片画廊**:涉及文件上传、图片处理以及展示的技术细节。 5. **RSS阅读器**:通过解析XML格式的数据,实现订阅、更新RSS源的功能。 这些案例不仅覆盖了PHP的基础知识,也深入探讨了高级特性和实际应用场景,...
打包一起上传。懒得弄了。 C.Plus.Plus.for.Engineers.and.Scientists,.Bronson,.3ed,..Course,.2010,.Source.Codes,.0324786433_233683-.exe │ Objective-C.Recipes.A.Problem-Solution.Approach,.Matthew....
**font-awesome 字体筛选工具详解** 在Web设计和开发领域,`Font Awesome`是一个非常流行的图标库,它提供了一套矢量图标,可以方便地在网页上使用。这些图标是基于字体的,因此它们可以像文字一样进行缩放、着色和...
9. **静态文件和媒体文件**:Django处理静态文件(如CSS、JavaScript和图片)以及用户上传的媒体文件(如文章的图片)。 10. **部署**:了解如何将Django应用部署到服务器,如使用Gunicorn或uWSGI作为应用服务器,...