本人水平有限,如有错误,欢迎指正,谢谢!

思路:

1、手机端选择图片或拍照后,由于体积过大,上传到服务器端后,不仅占用服务器磁盘空间,而且打开速度慢,所以采用前端JS对图片进行压缩后上传。

2、服务器端用ASP进行接收并保存,返回上传后的图片文件名,手机端获取到图片后,利用URL即可打开上传后的图片。

3、可对图片文件格式及大小进行限制。

手机端:

<%@codepage="65001"%> 
<%response.charset="utf-8"%> 
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<meta name="viewport" content="initial-scale=1, maximum-scale=1">
<meta name="apple-mobile-web-app-capable" content="yes">
<meta name="apple-mobile-web-app-status-bar-style" content="black">
<script type="text/javascript" src="js/jquery.min.js"></script>
<script language="javascript">

function right(mainStr,lngLen) {
 if (mainStr.length-lngLen>=0 && mainStr.length>=0 && mainStr.length-lngLen<=mainStr.length) {
 return mainStr.substring(mainStr.length-lngLen,mainStr.length)}
 else{return null}
 }
 var fileext="";
 
window.οnlοad=function(){
    var eleFile = document.querySelector('#jjfxSoft_iconPath');
    // 压缩图片需要的一些元素和对象
    var reader = new FileReader(), 
        img = new Image();
    // 选择的文件对象
    var file = null;
    // 缩放图片需要的canvas
    var canvas = document.createElement('canvas');
    var context = canvas.getContext('2d');
    // base64地址图片加载完毕后
    img.onload = function () {
        debugger
        // 图片原始尺寸
        var originWidth = this.width;
        var originHeight = this.height;
        // 最大尺寸限制
        var maxWidth = 1000, maxHeight = 1000;
        // 目标尺寸
        var targetWidth = originWidth, targetHeight = originHeight;
        // 图片尺寸超过300x300的限制
        if (originWidth > maxWidth || originHeight > maxHeight) {
            if (originWidth / originHeight > maxWidth / maxHeight) {
                targetWidth = maxWidth;
                targetHeight = Math.round(maxWidth * (originHeight / originWidth));
            } else {
                targetHeight = maxHeight;
                targetWidth = Math.round(maxHeight * (originWidth / originHeight));
            }
        }
            
        // canvas对图片进行缩放
        canvas.width = targetWidth;
        canvas.height = targetHeight;
        // 清除画布
        context.clearRect(0, 0, targetWidth, targetHeight);
        // 图片压缩
        context.drawImage(img, 0, 0, targetWidth, targetHeight);
        var type = 'image/jpeg';
        //将canvas元素中的图像转变为DataURL
        var dataurl = canvas.toDataURL(type);
        $("#ceshi1").attr("src",dataurl);
        //抽取DataURL中的数据部分,从Base64格式转换为二进制格式
        var bin = atob(dataurl.split(',')[1]);
        //创建空的Uint8Array
        var buffer = new Uint8Array(bin.length);
        //将图像数据逐字节放入Uint8Array中
        for (var i = 0; i < bin.length; i++) {
            buffer[i] = bin.charCodeAt(i);
        }
        //利用Uint8Array创建Blob对象
        var blob = new Blob([buffer.buffer], {type: type});
        var url = window.URL.createObjectURL(blob);
      //  $("#ceshi").attr("src",url);
        //在这里上传blob
        var formData=new FormData();
        formData.append("file",blob,"abc.jpg");
       $.ajax({
        type: 'post',
        url: "SavePhoto.asp?bs="+$("#bs").text()+"&fileext="+fileext, //上传文件的请求路径必须是绝对路劲
         data: formData,
         cache: false,
         processData: false,
         contentType: false,
          }).success(function (data) {
              if(data==-1){
                  alert("对不起,上传资质文件最大为6MB!");
                  return;
              }else{
                  //$("#mpic").attr("src","/Upload/"+data);
                  alert("照片上传成功!");
              }
          }).error(function () {
             alert("照片上传失败");
         });
        };

// 文件base64化,以便获知图片原始尺寸
    reader.onload = function(e) {
        img.src = e.target.result;
    };
    eleFile.addEventListener('change', function (event) {
        file = event.target.files[0];
        
       fileext=right($("#jjfxSoft_iconPath").val(),4).toUpperCase();
       if((fileext!=".JPG")&&(fileext!=".PNG")){
           alert("对不起,文件格式不正确,只能上传JPG或PNG文件!");
           return;
       }        
        
        // 选择的文件是图片
        if (file.type.indexOf("image") == 0) {
            reader.readAsDataURL(file);    
        }
    });
}

function up(){
      $("#jjfxSoft_iconPath").click();
  }
</script>
<title>物品照片上传</title>
</head>
<body style="list-style:none; color:#666; line-height:35px;">
<span id="bs" style="display:none;"><%=request.querystring("bs")%></span>
<img id="ceshi" style="display:none;">
<div style="width:100%;">
<li style=" width:90%; margin-left:5%;">点击图片上传照片</li>
<img id="ceshi1" src="data:images/uploadpic.png" style="width:90%; margin-left:5%;" onClick="up();">
<li style="width:90%; margin-left:5%;">文件大小不超过6MB,JPG或PNG格式</li>
</div>
<input name="file" type="file" id="jjfxSoft_iconPath" style="display:none;">
</body>
</html>

服务器接收端:SavePhoto.asp

<%@codepage="65001"%> 
<%response.charset="utf-8"%> 
<%
  Randomize
  
 function GetRndFileName(namelen)
   clist="abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"
   jg=""
   for i=1 to namelen
     p=INT(62*RND())+1
     jg=jg&mid(clist,p,1)
   next
   GetRndFileName=jg
 end function
 
 fileext=request.querystring("FileExt")
 BS=request.querystring("bs")
 filename="P"&GetRndFileName(10)&fileext

Dim FormData, FormSize , DataStart , CLStr
 FormSize = Request.TotalBytes 
 FormData = Request.BinaryRead(FormSize)
 set alldata=server.createobject("ADODB.Stream")
 alldata.Type=1
 alldata.open
 
 alldata.Write FormData
 
 dim Binary
 alldata.position=0
 Binary=alldata.Read 
 
 CLStr=ChrB(13)&ChrB(10)
 DataStart=InStrB(Binary,CLStr&CLStr)+4
 DivStr = LeftB(Binary,InStrB(Binary,CLStr)-1)
 DataSize=InStrB(DataStart+1,Binary,DivStr)-DataStart-2 
 
 if fix(DataSize/1024)>6144 then
   alldata.close
   set alldata=nothing
   response.write "-1"
   response.end
 end if
 
 
 set st=Server.CreateObject("ADODB.Stream")
 st.Type=1
 st.Mode=3
 st.open
 alldata.position=DataStart-1
 alldata.copyto st,DataSize
 st.SaveToFile Server.MapPath("/Upload/"&filename),2
 st.close
 set st=nothing
 alldata.close
 set alldata=nothing
 response.write filename
 response.end

%>

手机端利用JS压缩图片并上传相关推荐

  1. js 导出pdf上传至oss_前端上传图片到oss,压缩图片后上传至oss(补充图片文件旋转90度问题)...

    上传图片如果过大,等待时间过长体验不好,于是使用js压缩图片再上传,无关图片清晰度. /** * 压缩图片 * @param file 图片文件 * @param callback 回调函数,压缩完要 ...

  2. cropper.js 裁剪图片并上传(文档翻译+demo)(转)

    官网http://fengyuanchen.github.io/cropper/ 文档https://github.com/fengyuanchen/cropper/blob/master/READM ...

  3. html图片上传布局,上传图片(压缩图片再上传),布局参考以前的文章(https://www.jianshu.com/p/d379ab1b3eec)...

    引入一个js: 百度网盘链接:https://pan.baidu.com/s/1KO9gH4r6bP-foYVAQn5AxQ 提取码:mgcm 复制这段内容后打开百度网盘手机App,操作更方便哦 ht ...

  4. h5压缩图片并上传到oss

    需求背景:h5上传图片到oss,并返回图片的链接 参考资料: 阿里云oss multipartUpload api 图片纯前端JS压缩的实现 注意:以下不包括业务代码,纯个人处理的oss上传封装,替换 ...

  5. php支持上传音乐播放网,基于ThinkPHP5框架开发的响应式在线音乐播放网站PHP源码+WAP手机端|在线支付+会员购买+音乐上传...

    源码介绍 基于ThinkPHP5框架开发的响应式在线音乐播放网PHP源码,是一款开源的跨平台音乐管理系统,基于国内最优秀的开源框架ThinkPHP5.0.11内核开发的在线DJ音乐播放分享网站,完全免 ...

  6. thumbnailator压缩图片并上传文件服务器

    1.引入pom <!--thumbnailator 压缩工具--><dependency><groupId>net.coobird</groupId>& ...

  7. 原生js实现图片单张上传及批量上传

    效果图: <!DOCTYPE html> <html lang="en"> <head><meta charset="UTF-8 ...

  8. java等比压缩图片_java上传并压缩图片(等比例压缩或者原尺寸压缩)

    先看效果: 原图:1.33M 处理后:27.4kb 关键代码; package codeGenerate.util; import java.awt.Color; import java.awt.Gr ...

  9. php图片提交,php+js实现图片的上传、裁剪、预览、提交示例

    首先用到的语言是php.插件imgareaselect(),没有太多花哨的样式,index.php代码如下: function preview(img, selection) { $('#select ...

最新文章

  1. WEB 打印的相关技术分析
  2. ValueError: y_true and y_pred contain different number of classes 9, 2. Please provide the true labe
  3. 赠书 | 热潮下的冷思考,人工智能即将改变的三大领域
  4. Swift中关于元组的某些特性
  5. golang web开发框架 Beego
  6. 初探面向对象编程之oop与设计模式
  7. 厉害了,淘宝千万并发,14 次架构演进…
  8. HDOJ 4699-Editor[栈]
  9. 转发和重定向和request域对象
  10. 解决‘C:\Program‘ 不是内部或外部命令,也不是可运行的程序或批处理文件
  11. SAP Spartacus 电商云 UI Shipping Method 在单元测试环境下没有显示的问题
  12. ant 彻底了解(转)
  13. 手绘水彩卡通插画 | 艺术品因有灵魂而珍藏
  14. opencore0.6.4_iOS 13.4/iPadOS 13.4正式版发布:iCloud支持文件夹共享
  15. [CH5E02] A Little Shop of Flowers
  16. INFO:AdminStudio Debug
  17. 大概的知识点 有点乱(乱的一批)
  18. win7系统传奇如何架服务器,win7系统如何架设传奇服务端玩游戏更流畅
  19. 推荐 10 款 C++ 在线编译器
  20. 关于闲鱼测试数据构造,我有几条心得

热门文章

  1. nginx配合python_Nginx基本配置
  2. sql语句中索引的创建、删除及使用
  3. 【观察】让IT变为业务的支撑者 Ivanti的重构与创新
  4. 有没有国AAA级的台灯?护眼灯AAA级和国AA级是同一个东西吗
  5. yolov3 tiny训练自己的数据集进行物体检测 (只检测行人)
  6. week11 Open3D点云数据处理
  7. DOS命令让电脑发射wifi
  8. 什么蓝牙耳机听歌好?听歌音质好的蓝牙耳机推荐
  9. 前端学习--【基础01】使用VMware虚拟机模拟软件配置一台CentOS 7操作系统的电脑
  10. 主板、科创板、创业板、北交所IPO中介机构收费排名(1-3月份)