`
cxw65066165
  • 浏览: 10974 次
社区版块
存档分类
最新评论

html5 图片上传范例详解

阅读更多
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上传范例,测试可用,除了主流的浏览器外还可以兼容IE8以上浏览器

    【ASP使用JQuery.Uploadify实现文件上传详解】 在Web开发中,文件上传功能是不可或缺的一部分。JQuery.Uploadify是一款基于jQuery的文件上传插件,它提供了丰富的自定义选项和友好的用户界面,使得文件上传变得简单...

    fckeditor使用范例

    1. **插入图片**:FCKeditor 支持直接在编辑器内上传图片。用户可以通过点击“插入”菜单中的“图像”选项,选择本地图片上传。为了实现这个功能,你需要配置图片上传的相关设置,包括上传路径、文件类型限制等。 2...

    fckedit 编辑器 实例

    例如,你可能想要添加图片上传功能,可以通过创建一个插件实现,使用户可以直接在编辑器中上传并插入图片。 ### 6. 兼容性和性能优化 尽管FCKeditor在多种浏览器上表现良好,但仍然需要关注兼容性问题,特别是对于...

    FCKeditor v2.6.3

    **FCKeditor v2.6.3 知识点详解** FCKeditor 是一款历史悠久的开源富文本编辑器,主要用于Web应用中,提供用户在网页上进行格式化文本的编辑功能,类似于桌面环境下常见的文字处理软件。FCKeditor v2.6.3是其在2008...

    仿豆果网 php+mysql

    4. **文件操作**:可能涉及到上传用户图片、下载食谱文档等,需要掌握PHP的文件系统函数。 5. **会话管理**:使用session或cookie来实现用户登录状态的跟踪。 6. **错误与异常处理**:良好的错误处理机制能确保程序...

    niit考试mvc4模块1

    4. **MVC范例与角色划分**:在MVC应用中,常见的角色包括开发者、设计师和数据库管理员。开发者编写模型和控制器,设计师负责视图的设计,而数据库管理员管理数据存储。 5. **HTTP方法**:用于在URL中提交数据的...

    C++ 100本好书

    打包一起上传。懒得弄了。 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 字体筛选工具

    **font-awesome 字体筛选工具详解** 在Web设计和开发领域,`Font Awesome`是一个非常流行的图标库,它提供了一套矢量图标,可以方便地在网页上使用。这些图标是基于字体的,因此它们可以像文字一样进行缩放、着色和...

    asp.net知识库

    常用编码工具类,支持base64,md5,des,crc32 也谈谈技术面试 在C#里把ArrayList转换为Array 或 把Array转换为ArrayList C# 2.0 在.NET 2.0中,让你的组件也可以绑定 .NET20 一种简单的窗口控件UI状态控制方法 翻译MSDN...

    blog1-mele:Django博客应用

    9. **静态文件和媒体文件**:Django处理静态文件(如CSS、JavaScript和图片)以及用户上传的媒体文件(如文章的图片)。 10. **部署**:了解如何将Django应用部署到服务器,如使用Gunicorn或uWSGI作为应用服务器,...

Global site tag (gtag.js) - Google Analytics