利用 Javascript 实现上传图片并向服务器获取图片路径后显示的 demo
2017-10-21 23:48
731 查看
由于某些特殊原因,有时需要从服务端请求到图片路径,需要给该接口传递对应图片的base64 dataURL,并且有时需要将其上传图片的类型统一为 jpeg 格式时,可采用以下方式。
HTM L代码如下:
JS 代码如下:
原始页面效果如下:
选择上传图片后并显示在页面的效果如下:
然后要提交表单之后显示图片的话就得传递该图片的完整路径过去,由于 file 类型的 input 出于安全考虑不让修改其 value 值,于是我就利用一个隐藏域指定其 value 值为该图片的路径以此来给表单接收该值,这样就解决了该问题了!
注意:虽然文件加载进来了,但是图片也需要加载进来再进行处理,也就是要加上 image.onload 函数对图片进一步处理,否则返回的图片路径访问不了,提示图片内容有错,应该就是图片数据不完整的缘故了,所以上面两个异步执行的 onload 函数都要加上。
HTM L代码如下:
<html> <meta charset="utf-8"> <form action="表单提交处理的url" method="post"> <img id="showImg" src=""/> <br/> <!--下面的隐藏域主要用来改变file类型的input的值,但是file类型的input的值出于安全考虑不让修改,但是表单提交后需要处理该值(放置图片路径)来显示服务器上的图片--> <input type="hidden" id="img" name="uploadImg"/> 请选择上传图片:<input type="file" id="uploadImg" onchange="selectImg(this);"/> </form> </html>
JS 代码如下:
<script type="text/javascript"> var image = ''; var canvas; var base64;//将canvas压缩为base64格式 function selectImg(file){ if(!file.files || !file.files[0]){ return; } var reader = new FileReader();//读取文件 reader.onload = function(event){//文件读取完成的回调函数 image = document.getElementById('showImg'); image.src = event.target.result;//读入文件的base64数据(可直接作为src属性来显示图片) //alert(event.target.result); //图片读取完成的回调函数(必须加上否则数据读入不完整导致出错!) image.onload = function(){ canvas = convertImageToCanvas(image); //图片转canvas base64 = canvas.toDataURL('image/jpeg'); //将图片数据转为base64. //alert(base64); $.post( "/server_interface_url/", //服务器接口(返回图片路径) {data:base64}, function(data) { alert(data.target); //alert(eval(data)); //修改上传文件的路径名字(图片完整路径) $('#img').val('http://path/'+data.target); }, "json"); } } //将文件已Data URL的形式读入页面 reader.readAsDataURL(file.files[0]); } // 把image 转换为 canvas对象 function convertImageToCanvas(image) { // 创建canvas DOM元素,并设置其宽高和图片一样 var canvas = document.createElement("canvas"); canvas.width = image.width; canvas.height = image.height; // 坐标(0,0) 表示从此处开始绘制,相当于偏移。 canvas.getContext("2d").drawImage(image, 0, 0); return canvas; } </script>
原始页面效果如下:
选择上传图片后并显示在页面的效果如下:
然后要提交表单之后显示图片的话就得传递该图片的完整路径过去,由于 file 类型的 input 出于安全考虑不让修改其 value 值,于是我就利用一个隐藏域指定其 value 值为该图片的路径以此来给表单接收该值,这样就解决了该问题了!
注意:虽然文件加载进来了,但是图片也需要加载进来再进行处理,也就是要加上 image.onload 函数对图片进一步处理,否则返回的图片路径访问不了,提示图片内容有错,应该就是图片数据不完整的缘故了,所以上面两个异步执行的 onload 函数都要加上。
相关文章推荐
- 利用struts2框架实现当用户上传图片到服务器后,再显示到前台页面中
- asp.net上传图片,保存文件名和路径,并利用javascript显示图片预览
- JavaScript、jquery实现上传图片(图片存到服务器,路径存到数据库字段中)一
- 利用FormData实现附件上传(实现上传图片显示)
- 利用Javascript获取上传文件、图片
- 利用uploadify实现图片上传(重命名、图片异步显示)
- tomcat或Jboss实现图片上传至服务器并共享访问,虚拟路径设置方法
- 利用 GetModuleFileName获取exe文件路径,,以显示bmp, jpg, png图片
- QT实现CSDN上传资源管理助手Demo之(4)请求网络图片SVG并显示
- Android——获取系统图片/拍照/获取图片路径并显示的Demo
- 实现上传图片之后显示预览javaScript代码
- [置顶] 在HTML表单中利用JavaScript实现图片上传的前端校验
- asp.net实现上传图片显示本地绝对路径图片
- Java上传图片到服务器路径获取系列之--图片保存到Tomcat的webapps目录下
- 利用jQuery插件imgAreaSelect实现图片上传裁剪(同步显示图像位置信息)
- Image显示服务器上任意绝对路径下的图片(采用二进制流实现)
- ASP加javascript实现图片轮流显示(图片路径从数据库中读取)
- 【Servlet】利用Servlet3.0标准与JSTL表达式实现文件上传系统,支持图片上传后显示
- 利用javascript剪裁图片(也许CSDN也是如此实现图像上传剪裁)
- 上传图片到服务器系列之----前后台路径获取问题