使用cropbox.js+jquery.js+servlet实现图片的上传下载
2017-06-07 15:41
316 查看
采用cropbox.js+jqueryajax + servlet实现图片的上传下载
原理解释:利用javascript的内置对象FileReader读取计算机中的文件。
读取的文件会被转化为base64编码的字符串,此后通过jquery ajax将文件字符串发送到servlet,servlet接收到字符串之后,通过base64进行解码操作。重新构造图片文件,并将文件存入存储器中。
js代码详情:
var reader = new FileReader();
为创建的FilReader对象绑定load事件,监听reader读取数据是否成功。
reader.onload= function(e) {
//e.target.result获取到的是base64编码
options.imgSrc =e.target.result;
cropper = new cropbox(options);
}
//当FileReader对象通过readAsDataURL读取数据成功后,就会触发load事件,target中的result属性的值就是该文件的base64数据
reader.readAsDataURL(this.files[0]);
//剪裁
document.querySelector('#btnCrop').addEventListener('click',
function(){
var img = cropper.getDataURL();//这里cropper是创建的cropbox.js中的cropbox对象,调用了getDateURL()方法获得图片的base64编码字符串
document.querySelector('.cropped').innerHTML +=
'<img src="'+img+'">';
$.ajax({
method : 'post',
url : "/study/servlet/uploadImgServlet",
type:"text",
data: {"img":img},
success:function(data){
$("#showImage").html('<img src="'+data+'">');
},
error:function(error){
alert(error);
}
});
})
后台代码详情:
protected
void doPost(HttpServletRequest request, HttpServletResponse
response) throws ServletException, IOException {
PrintWriter writer =
response.getWriter();
String imgString =
request.getParameter("img");
String im = processImgStr(imgString);
System.out.println(imgString);
System.out.println(im);
String path =
"E:\\javaEE生成文件\\dd.jpg";
generatorImage(im,path);
String imgHeader =
"data:image/png;base64,";
writer.write(imgHeader + getImageStr(path));
writer.flush();
writer.close();
}
/**
* @Description:
将base64编码字符串转换为图片
* @Author:
* @CreateTime:
* @param imgStr base64编码字符串
* @param path
图片路径-具体到文件
* @return
*/
public String processImgStr(String
imgStr){
int
headIndex = imgStr.indexOf(',') + 1;
return
imgStr.substring(headIndex);
}
public
boolean generatorImage(String imgStr,String
filePath){
if(imgStr==null){
return
false;
}
else {
BASE64Decoder decoder =
new BASE64Decoder();
try {
//解密过程
byte[]
imgByte = decoder.decodeBuffer(imgStr);
//处理数据
for(int
i = 0; i <
imgByte.length;
i ++){
if(imgByte[i] < 0){
imgByte[i] += 256;
}
}
OutputStream out =
new FileOutputStream(filePath);
//将图片存放入文件
out.write(imgByte);
out.flush();
out.close();
return
true;
} catch (Exception
e) {
e.printStackTrace();
return
false;
}
}
}
/**
* @Description:
根据图片地址转换为base64编码字符串
* @Author:
* @CreateTime:
* @return
*/
public String getImageStr(String
imgFile) {
InputStream inputStream =
null;
byte[]
data = null;
try {
inputStream =
new FileInputStream(imgFile);
data = new
byte[inputStream.available()];
inputStream.read(data);
inputStream.close();
} catch (IOException
e) {
e.printStackTrace();
}
// 加密形成base64编码字符串
BASE64Encoder encoder =
new BASE64Encoder();
return
encoder.encode(data);
}
相关文章推荐
- asp.net+jquery.form实现图片异步上传的方法(附jquery.form.js下载)
- 使用jquery.form.js实现图片上传的方法
- asp.net+jquery.form实现图片异步上传的方法(附jquery.form.js下载)
- 使用jquery.form.js实现图片上传的方法
- 使用js和jquery实现点击图片上传及预览
- 微信公众号开发《四》使用微信JS-SDK实现手机图片上传,支持压缩、预览。并下载图片到自身服务器
- 使用jquery.form.js+servlet实现文件异步上传
- 使用jsp/servlet实现文件上传与下载
- 上传图片预览功能的IE浏览器兼容性问题的实现:JS+JQuery+CSS完整版
- [置顶] Java Web 使用Servlet 实现上传图片功能!
- 使用jsp/servlet简单实现文件上传与下载
- jquery imgareaselect 使用利用js与程序结合实现图片剪切
- .net+ajax+jquery.form实现简单的图片批量上传 含Demo源码下载
- jquery.fileupload.js插件使用初探--多图片上传预览
- 使用jquery-fileupload.js实现文件上传-webx3
- 使用jQuery实现验证上传图片的格式与大小
- megapix-image插件 使用Canvas压缩图片上传 MegaPixImage.js下载
- JS限制上传图片大小不使用控件在本地实现
- ajax上传图片所用jquery.form.js插件详细使用方法
- jquery imgareaselect 使用利用js与程序结合实现图片剪切