JavaScript进阶(八)JS实现图片预览并导入服务器功能

news/2024/11/8 15:41:07/

赠人玫瑰,手留余香。若您感觉此篇博文对您有用,请花费2秒时间点个赞,您的鼓励是我不断前进的动力,共勉!

      项目开发过程中,需要实现文件上传功能。借此机会学习之。

      使用HTML中现有的input type “file”可以支持这一功能。如下所示:

 <input ng-model="url" id="url" type="file"/>

       浏览时只显示指定文件类型

<input type="file" accept="application/msword" ><br><br>accept属性列表<br>1.accept="application/msexcel"2.accept="application/msword"3.accept="application/pdf"4.accept="application/poscript"5.accept="application/rtf"6.accept="application/x-zip-compressed"7.accept="audio/basic"8.accept="audio/x-aiff"9.accept="audio/x-mpeg"10.accept="audio/x-pn/realaudio"11.accept="audio/x-waw"12.accept="image/gif"13.accept="image/jpeg"14.accept="image/tiff"15.accept="image/x-ms-bmp"16.accept="image/x-photo-cd"17.accept="image/x-png"18.accept="image/x-portablebitmap"19.accept="image/x-portable-greymap"20.accept="image/x-portable-pixmap"21.accept="image/x-rgb"22.accept="text/html"23.accept="text/plain"24.accept="video/quicktime"25.accept="video/x-mpeg2"26.accept="video/x-msvideo"

     下面的问题是:如何获得文件的上传路径,然后才能进行文件的读写后续操作。

      下面是一个图片上传、预览的Demo:

<!doctype html> 
<html> <head> <meta content="text/html; charset=UTF-8" http-equiv="Content-Type" /> <title>Image preview example</title> <script type="text/javascript"> var loadImageFile = (function () { if (window.FileReader) { var oPreviewImg = null, oFReader = new window.FileReader(), rFilter = /^(?:image\/bmp|image\/cis\-        cod|image\/gif|image\/ief|image\/jpeg|image\/jpeg|image\/jpeg|image\/pipeg|image\/png|image\/svg\+xml|image\/tiff|image\/x\-cmu\-raster|image\/x\-cmx|image\/x\-icon|image\/x\-portable\-anymap|image\/x\-portable\-bitmap|image\/x\-portable\-graymap|image\/x\-portable\-pixmap|image\/x\-rgb|image\/x\-xbitmap|image\/x\-xpixmap|image\/x\-xwindowdump)$/i; oFReader.onload = function (oFREvent) { if (!oPreviewImg) { var newPreview = document.getElementById("imagePreview"); oPreviewImg = new Image(); oPreviewImg.style.width = (newPreview.offsetWidth).toString() + "px"; oPreviewImg.style.height = (newPreview.offsetHeight).toString()+"px"; newPreview.appendChild(oPreviewImg); } oPreviewImg.src = oFREvent.target.result; arr = oPreviewImg.src.toString().split(",");alert(arr[0]);alert(arr[1]);
}; return function () { var aFiles = document.getElementById("imageInput").files; if (aFiles.length === 0) { return; } if (!rFilter.test(aFiles[0].type)) { alert("You must select a valid image     file!"); return; } oFReader.readAsDataURL(aFiles[0]); } } if (navigator.appName === "Microsoft Internet Explorer") { return function () { alert(document.getElementById("imageInput").value); document.getElementById("imagePreview").filters.item("DXImageTransform.Microsoft.AlphaImageLoader").src = document.getElementById("imageInput").value; } } })(); 
</script> 
<style type="text/css"> #imagePreview { width: 160px; height: 120px; filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(sizingMethod=scale); 
} 
</style> 
</head> 
<body> <div id="imagePreview"> 
</div> <form name="uploadForm"> 
<p> <input id="imageInput" type="file" name="myPhoto" onchange="loadImageFile();" /><br /> <input type="submit" value="Send" /></p> 
</form> 
</body> 
</html> 

测试

通过测试,可得到文件的格式、编码方式及编码内容,如下所示:

 

领悟

      通过阅读代码,可以获取到图片的格式与编码方式了。接下来就是文件的传输了。

      经历了两天的屈辱、不甘、痛苦挣扎,自己最终还是顽强的站了起来。

      晚上回到宿舍继续挣扎,慢慢思路得以理清:在获取到图片的Base64编码格式之后,自己就联想到了之前写过的文件传输代码了,当然之前写的都是一些基本的文件操作。由此,自己联想,在这使用最原始的文件传输方法应该也可以实现。

      早晨到实验室,自己先尝试将图片的Base64编码传输至服务端,在服务端接收到客户端传输来的Base64编码后,采用Base64Img工具包(点击下载工具包)将Base64图片编码转换为图片格式,并保存至指定位置。初次尝试,将图片文件保存至本地是没有问题的。经过更改一些细微的细节问题,将程序部署在阿里云服务器上,经过测试,SUCCESS!

核心代码

html

<div style="padding-top: 15px">
<label for="pic">更新广告图片 :</label>
<!-- <a class="btn btn-warning btn-sm" id="choice" ng-click="doChoice()" style="font-size:14px; color:red; font-family:微软雅黑; border-radius: 9px;">选择文件</a> -->
<input id="imageInput" type="file" accept="image/jpeg" 	    	onchange="loadImageFile();" />
<i id="img" hidden="hidden"></i>
<i id="imgName" hidden="hidden"></i>
</div>

javaScript

arr = oPreviewImg.src.toString().split(",");
document.getElementById("img").innerHTML = arr[1];
document.getElementById("imgName").innerHTML = 	  	document.getElementById("imageInput").files[0].name;
//alert(document.getElementById("img").innerHTML);
//alert(document.getElementById("imageInput").files[0].name);// 获取   	图片名称(PS:瞬间感觉自己好聪明啊~~)
//alert(arr[0]);// 获取图片格式与编码方式
//alert(arr[1]);// 获取图片Base 64编码字节

程序截图

客户端顶部显示广告信息:

 

服务端广告管理界面:

 

服务端修改广告信息界面:

 

结语

      至此,自己的文件上传操作终于完成了,一路坎坷,一路心酸。

      自己也曾尝试过使用ng插件ng-file-upload(见参考文献1),但最终还是以失败而告终,真心没有搞明白代码,仿照源代码写就是没有效果,而且布局也不对,自己也是汗颜了。

      自己接下来要突破的问题就是分页了,对于刚接触到的知识,往往不明觉厉。

参考文献

1.GitHub - danialfarid/ng-file-upload: Lightweight Angular directive to upload files with optional FileAPI shim for cross browser support

2.[Angularjs]ng-file-upload上传文件 - wolfy - 博客园

3.http://jsfiddle.net/danialfarid/maqbzv15/544/#update

4.登录 - 推酷


http://www.ppmy.cn/news/769007.html

相关文章

android图片特效处理之模糊效果

这篇将讲到图片特效处理的模糊效果。跟前面一样是对像素点进行处理&#xff0c;算法是通用的&#xff0c;但耗时会更长&#xff0c;至于为什么&#xff0c;看了下面的代码你就会明白。 算法&#xff1a; 一、简单算法&#xff1a;将像素点周围八个点包括自身一共九个点的RGB值…

解决H5调用安卓相机实现拍照并上传

最近在开发中遇到一个问题&#xff0c;要在APP内嵌的H5页面中实现拍照录像并上传到后端服务器。 刚开始我直接想到&#xff1a; <input type"file" accept"image/*" capture"camera"> 由于项目用vant UI&#xff0c;于是用了Uploader文…

mui 原生jsH5预览图片

mui 原生jsH5预览图片 下载mui.min.css&#xff0c;mui.js&#xff0c;mui.zoom.js&#xff0c;mui.imageViewer.js&#xff0c;mui.previewimage.js&#xff0c;app.js <link rel"stylesheet" href"./css/mui.min.css"> <script src"./js/…

html实现调取手机相机进行拍照上传——技能提升

今天同事问我一个我之前参与的项目&#xff0c;由于之前只做了样式&#xff0c;并没有书写功能&#xff0c;因此同事接手后需要做一个html实现手机拍照上传的功能&#xff1a; 由于项目是一个后台管理系统&#xff0c;使用的是vueant-design的框架&#xff0c;因此上传图片就是…

MUI 实现手机图片上传

由于公司自主研发APP&#xff0c;使用的是MUI框架。我做了其中头像图片上传的功能&#xff0c;在此分享下demo&#xff1b; 如有不规范处&#xff0c;请多多指教&#xff0c;互相学习。 第一次接触这个框架&#xff0c;踩了许多的坑 >_< 步骤&#xff1a;点击选择图片 →…

安卓手机如何快速把文件传输给PC端,别再用蓝牙了,用了这款软件你就会爱上它

如何快速传输文件到PC端 安卓手机如何快速分享文件到PC端&#xff0c;求求你别用传统的蓝牙连接传输了&#xff0c;太out了。蓝牙的传输速度一般在几百KB,那是相当的慢。 当然你会说用数据线不是更快吗&#xff1f; 恩&#xff0c;那如果你身边没有有数据线&#xff0c;并且你…

安卓 android原生+h5实现蓝牙打印佳博

权限private void checkPermission() {for (String permission : permissions) {if (PackageManager.PERMISSION_GRANTED ! ContextCompat.checkSelfPermission(this, permission)) {per.add(permission);}}}private void requestPermission() {if (per.size() > 0) {String…

android 兼容模式设置,天天安卓模拟器切换极速模式与兼容模式的方法

天天安卓模拟器是一款非常优秀的安卓模拟器&#xff0c;其为用户提供了一个完善的安卓模拟环境&#xff0c;帮助用户运行安卓上的游戏、应用&#xff0c;而且其为用户提供了诸多的辅助功能&#xff0c;按键操作、手柄操作、全屏、截屏等都能轻松实现&#xff0c;而这款软件最大…