js对图片进行质量压缩后上传服务器

基本的原理就是将图片格式转换成base64格式的,进行压缩,然后再转回固定格式的图片文件,大的形式是以form表单形式进行后台交互的,但里面会new一个form和一个XMLHttpRequest对象,这样可以弥补form表单提交文件没有失败返回的空缺,当限制使用jquery里的AjaxForm的时候,这也是一个很好的选择。

var bl = convertBase64UrlToBlob(base64Codes);
form.append("fileupload", bl, "file_"+Date.parse(new Date())+".jpg")

以下代码是压缩图片的源码,项目里面可以直接拿来复用的:

               var xhr;
                        var fileObj = document.getElementById("postPic").files[0]; // js 获取文件对象
                        var url = ctx+‘/ucenter/activityZp/uploadFileDataAjax‘;//后台接口地址
                        var form = new FormData(); // FormData 对象
                        form.append("act_id",id);
                        form.append("studentIdAndSchoolId",studentId);
                        //alert("原始大小===="+fileObj.size/1024);
                        if(fileObj.size/1024 > 2048) { //大于2M,进行压缩上传
                            photoCompress(fileObj, {
                                quality: 0.5//压缩比例
                            }, function(base64Codes){
                                var bl = convertBase64UrlToBlob(base64Codes);
                                form.append("fileupload", bl, "file_"+Date.parse(new Date())+".jpg");
                                xhr = new XMLHttpRequest();  // XMLHttpRequest 对象
                                xhr.open("post", url, true); //post方式,url为服务器请求地址,true 该参数规定请求是否异步处理。
                                xhr.onload = uploadComplete; //请求完成
                                xhr.onerror =  uploadFailed; //请求失败
                                xhr.send(form); //开始上传,发送form数据
                                //alert("压缩过")
                            });
                        }else {
                            photoCompress(fileObj, {
                                quality: 1
                            }, function(base64Codes){
                                var bl = convertBase64UrlToBlob(base64Codes);
                                form.append("fileupload", bl, "file_"+Date.parse(new Date())+".jpg");
                                xhr = new XMLHttpRequest();  // XMLHttpRequest 对象
                                xhr.open("post", url, true); //post方式,url为服务器请求地址,true 该参数规定请求是否异步处理。
                                xhr.onload = uploadComplete; //请求完成
                                xhr.onerror =  uploadFailed; //请求失败
                                xhr.send(form); //开始上传,发送form数据
                            });
                        }

注意:代码里面点击input的时候,触发选中照片以后,触发以上的压缩图片事件,过程中会new FormData,生成另外一个input,如果同一张图片上传两次,并且都失败,这样就会有可能触发两次交互,导致接口重复调用,以及第二次状态提示框点击事件失效,最好在第一次完成以后刷新当前页面或者找方法销毁这个formdata;

<div id="inputReset">
     <input type="file" name="fileupload" accept="image/*" id="postPic" onchange="loadImg()">
</div>

原文地址:https://www.cnblogs.com/sakura-lifangfang/p/9644148.html

时间: 2024-10-07 06:00:16

js对图片进行质量压缩后上传服务器的相关文章

上传图片图像进行压缩后上传

图片压缩: NSData *imageData = UIImageJPEGRepresentation(self.uploadImage , 0.55); NSString *file_name = [TimeUtil getDateStringWithFormat:@"yyyy-MM-dd"]; NSString *upload_name =[NSString stringWithFormat:@"%@.jpg",file_name ]; [request set

前端获取图片压缩后上传给后台

 此前有同事跟我聊过关于移动端用canvas压缩图片后再上传的功能,最近有了点空闲时间,所以就实践了一下.demo效果链接在文章底部贴出. 在做移动端图片上传的时候,用户传的都是手机本地图片,而本地图片一般都相对比较大,拿iphone6来说,平时拍很多图片都是一两M的,如果直接这样上传,那图片就太大了,如果用户用的是移动流量,完全把图片上传显然不是一个好办法. 目前来说,HTML5的各种新API都在移动端的webkit上得到了较好的 实现.根据查看caniuse,本demo里使用到的FileRe

mac tar命令压缩后上传到windows虚拟机解压报错解决方案

在解压tar.gz文件的时候报错 [[email protected] Downloads]$ tar -zxvf clion-141.351.4.tar.gz gzip: stdin: not in gzip format tar: Child returned status 1 tar: Error is not recoverable: exiting now 原因是这个压缩包没有用gzip格式压缩,所以不用加z指令 [[email protected] Downloads]$ tar -

JS开发——文件夹的上传和下载

文件夹上传:从前端到后端 文件上传是 Web 开发肯定会碰到的问题,而文件夹上传则更加难缠.网上关于文件夹上传的资料多集中在前端,缺少对于后端的关注,然后讲某个后端框架文件上传的文章又不会涉及文件夹.今天研究了一下这个问题,在此记录. 先说两个问题: 是否所有后端框架都支持文件夹上传? 是否所有浏览器都支持文件夹上传? 第一个问题:YES,第二个问题:NO 只要后端框架对于表单的支持是完整的,那么必然支持文件夹上传.至于浏览器,截至目前,只有 Chrome 支持. 如果需要其它的浏览器支持则需要

js 压缩图片 上传

感谢,参考了以下作者的绝大部分内容 https://blog.csdn.net/tangxiujiang/article/details/78755292 https://blog.csdn.net/u011415782/article/details/79978608 大概的流程就是 点击file选择图片 js将图片解读出base64编码,然后通过js将base64编码转为压缩后的base64 然后通过ajax或者form把压缩后的base64编码提交到服务器(php) 然后php将base6

HTML5 file API加canvas实现图片前端JS压缩并上传 (转载)

一.图片上传前端压缩的现实意义 对于大尺寸图片的上传,在前端进行压缩除了省流量外,最大的意义是极大的提高了用户体验. 这种体验包括两方面: 由于上传图片尺寸比较小,因此上传速度会比较快,交互会更加流畅,同时大大降低了网络异常导致上传失败风险. 最最重要的体验改进点:省略了图片的再加工成本.很多网站的图片上传功能都会对图片的大小进行限制,尤其是头像上传,限制5M或者2M以内是非常常见的.然后现在的数码设备拍摄功能都非常出众,一张原始图片超过2M几乎是标配,此时如果用户想把手机或相机中的某个得意图片

Onethink上传服务器后登录不了的问题

在本地修改完Onethink后上传到服务器,进入后台登录的时候,发现输入用户名和密码和验证码后,第一次点击登录没反应,第二次点击提示验证码错误. 经过一研究发现 onethink 的登陆是通过API连接Ucenter实现的,而Ucenter有单独的数据库连接文件. 所以上传到服务器后要修改两部分数据库配置文件 1.\Application\Common\Conf\config.php(整站公用配置文件) 2.\Application\User\Conf\config.php(Ucenter配置文

(转)Android学习-使用Async-Http实现图片压缩并上传功能

(转)Android学习-使用Async-Http实现图片压缩并上传功能 文章转载自:作者:RyaneLee链接:http://www.jianshu.com/p/940fc7ba39e1 让我头疼一个星期的图片批量上传服务器的问题最后受这篇文章的作者启发而解决,自己之前一直执着于通过uri地址找到图片然后上传图片,却没想过直接上传图片本身.感谢作者的博客和启发. 前言 (转载请注明出处,谢谢!) 最近在做一个小项目,项目中要实现上传图片到服务器,而这个例子是实现图片的尺寸压缩,将获取到的压缩图

megapix-image插件 使用Canvas压缩图片上传

<!DOCTYPE html > <html> <head> <title>通过Canvas及File API缩放并上传图片</title> <script src="/Scripts/Jquery/jquery-1.8.3.min.js" type="text/javascript"></script> <script src="/Scripts/MegaPixIm