html文件内容(需要部署在服务器上才可使用):
<!DOCTYPE html>
<html><head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>拖拽本地图片到页面指定元素内</title>
<script type="text/javascript">
window.onload = function() {
var oDropBox = document.getElementById('dropBox');
oDropBox.addEventListener('dragover', function(e) {
e.stopPropagation();
e.preventDefault();
}, false);
oDropBox.addEventListener('drop', handleDrop, false);
function handleDrop(e) {
e.stopPropagation();
e.preventDefault();
var fileList = e.dataTransfer.files;
var fileType = fileList[0].type;
var oImg = document.createElement('img');
oImg.setAttribute("style", "width:150px;height:150px;");
var reader = new FileReader();
var reader2 = new FileReader();
if (fileType.indexOf('image') == -1) {
alert('image only!');
return;
}
reader.readAsDataURL(fileList[0]);
reader.onload = function(e) {
oImg.src = this.result;
oDropBox.innerHTML = '';
oDropBox.appendChild(oImg);
};
reader2.readAsBinaryString(fileList[0]);
reader2.onload = function(e) {
imgBinaryString = this.result;
};
}
;
};
</script>
</head>
<body>
<div id="dropBox"
style="float: left; width: 400px; height: 300px; margin: 10px 0 0 0; border: 1px solid #015EAC; color: #666; overflow: hidden; clear: left; font-size: 12px;">
拖拽图片到这里!</div>
</body>
</html>
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
用两个FileReader变量来分别获取文件的DataURL和BinaryString类型的数据,得到数据后放到json中通过ajax传入后台。后面按传BinaryString数据处理:
后台以String类型得到imageData并做处理:
File imgFile = new File(imgURL);
saveImage(new ByteArrayInputStream(imageData.getBytes("ISO-8859-1")), imgFile);
public static void saveImage(InputStream ins, File file) throws IOException {
OutputStream os = new FileOutputStream(file);
int bytesRead = 0;
byte[] buffer = new byte[8192];
while ((bytesRead = ins.read(buffer, 0, 8192)) != -1) {
os.write(buffer, 0, bytesRead);
}
os.close();
ins.close();
}
Html5 FileReader的使用参考:
http://blog.bingo929.com/google-enjoy-html5-drag-drop-filereaderenren.html
http://www.jsmix.com/html5/file-reader.html