热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

php+js实现上传图片

首先,码接上文JS实现调用手机相机功能质检报告

首先,码接上文JS实现调用手机相机功能

质检报告
name="cover" accept="image/*" capture="camera" />','','');">

使用input框调用手机相机功能或pc端上传图片功能(因直接截取的项目代码,未严格将无关代码剔除,请忽略部分变量、参数等代码,后面内容同此)

但如何将图片数据传输到后台php代码进行处理呢?这就需要用到js了:

function sendmsg(poheader,poline,id){//获取质检报告图片var doc_name = "check_report_image" + id;var check_report_image = document.getElementById(doc_name).files[0];console.log(check_report_image);if(typeof(check_report_image) == "undefined" || check_report_image.size <= 0) {alert("质检报告缺失,请拍照或选择照片");return;}var defaults = {json_url: &#39;/extensions/check/json_check.php&#39;,report_type: &#39;block&#39;,update_data: true};var settings = $.extend({}, defaults, printData);var formData = new FormData(); //创建formData对象,重点、重点、重点formData.append("poheader", poheader); //向formData对象中添加数据(键值对形式)formData.append("poline", poline);formData.append("status", status);formData.append("qualified_quantity", qualified_quantity);formData.append(&#39;check_report_image&#39;, check_report_image); //添加图片数据return $.ajax({url: settings.json_url,type: &#39;post&#39;,data: formData,// dataType: "json", //重点、重点、重点cache: false,//不缓存processData: false,//告诉jQuery不要去处理发送的数据contentType: false, //告诉jQuery不要去设置content-type请求头success: function (result) {if (result) {console.log(result);var obj = eval(&#39;(&#39; + result + &#39;)&#39;); //重点、重点、重点if(obj.status == 1) {console.log(obj.wait_quantity);alert("检验合格数量:" + qualified_quantity + ";不合格数量:" + obj.wait_quantity);}window.location.reload();},error: function (request, errorType, errorMessage) {}});window.location.reload();
}

要着重注意一下几点:

1、图片的传输有两种思路,改选择哪种思路:

(1)可以将图片转化为base64数据,然后通过ajax post请求把这个数据传输给后台进行处理,但不推荐,理由百度上很多就不陈述了。

(2)使用formData对象进行传输,这种方法比较方便,推荐。

2、H5 formData对象如何理解?有什么作用?

MDN上介绍说:XMLHttpRequest Level 2 添加了一个新的接口FormData,利用FormData对象,我们可以通过Javascript用一些键值对来模拟一系列表单控件,我们还可以使用XMLHttpRequest的send()方法来异步的提交这个“表单”。其实这介绍太抽象,我也不太理解,你只需要知道比起普通的ajax,使用formData的最大优点是我们可以异步上传一个二进制文件。

3、使用jQuery上传有两个配置需要特别注意:

processData会默认将data转化为字符串,所以需要配置为false,告诉jQuery不要去处理发送的数据。

contentType默认值为application/x-www-form-urlencoded;charset=UTF-8。上传文件是,contentType应该为multipart/form-data。但是设置为multipart/form-data也还会失败,因为只有设置为false才可以,告诉jQuery不要去设置contentType请求头。

4、接下来碰到一个很能体现我基础不扎实的问题,通过ajax,数据成功传到服务端php处理完之后向success返回data数据,此时我习惯性的使用eval()函数解析data数据,结果报错。一开始以为是数据没有按照规定的json格式{ "键" : "值" , "键" : "值" }或存在错误字符,但细心检查不是此类错误。

然后排查错误,发现dataType设置的是“json“格式,这种设置下,jQuery在返回时已经把返回值转换成了json对象,就不需要eval转换了,所以在eval()解析就多此一举了。如果dataType设置的是“text”格式的话,才需要用eval解析。然后将dataType:"json"注释掉,发现就没有错误了。

 

js端代码大概就是这些,下面是后端php代码比较简单:

//质检报告图片if($_FILES["check_report_image"]["error"] > 0 ) {echo json_encode([&#39;error&#39; => $_FILES["check_report_image"]["error"]], true);}else {//以符号“.”截取图片$exp_array = explode(".", $_FILES["check_report_image"]["name"]);//给图片起好名字$new_image_name = $po_header->po_header_id. "-" . $_POST[&#39;poline&#39;] . "-" . date("Ymd-His") . "." . end($exp_array);//将上传的图片移动到指定路径下$up_res = move_uploaded_file($_FILES["check_report_image"]["tmp_name"], "check_report_image/".$new_image_name);}

在php脚本中,上传文件需要处理的数据保存在超级全局数组$_FILES中。

存储在$_FILES[‘userfile’][‘error’]变量中的值将是任何与文件上传相关的错误代码。这是在PHP 4.2.0中增加的新特性。以此来监控上传是否出错。

上传没问题的话就通过move_uploaded_file(文件, 位置)函数将上传文件保存在指定位置,然后再将此位置存储在指定表中,何时使用图片何时据此调用即可。

 


推荐阅读
  • 本文探讨了 TypeScript 中泛型的重要性和应用场景,通过多个实例详细解析了泛型如何提升代码的复用性和类型安全性。 ... [详细]
  • 开发日志:高效图片压缩与上传技术解析 ... [详细]
  • 本文介绍了如何使用 Node.js 和 Express(4.x 及以上版本)构建高效的文件上传功能。通过引入 `multer` 中间件,可以轻松实现文件上传。首先,需要通过 `npm install multer` 安装该中间件。接着,在 Express 应用中配置 `multer`,以处理多部分表单数据。本文详细讲解了 `multer` 的基本用法和高级配置,帮助开发者快速搭建稳定可靠的文件上传服务。 ... [详细]
  • 2018年9月21日,Destoon官方发布了安全更新,修复了一个由用户“索马里的海贼”报告的前端GETShell漏洞。该漏洞存在于20180827版本的某CMS中,攻击者可以通过构造特定的HTTP请求,利用该漏洞在服务器上执行任意代码,从而获得对系统的控制权。此次更新建议所有用户尽快升级至最新版本,以确保系统的安全性。 ... [详细]
  • 在 Vue 项目中,为了提高页面加载速度和优化用户体验,实现图片上传前的压缩处理至关重要。本文介绍了如何通过集成第三方库和自定义组件,有效减小图片文件大小,确保在不影响图像质量的前提下,提升应用性能。 ... [详细]
  • 在项目需要国际化处理时,即支持多种语言切换的功能,通常有两种方案:单个包和多个包。本文将重点讨论单个包的实现方法。 ... [详细]
  • 使用HTML和JavaScript实现视频截图功能
    本文介绍了如何利用HTML和JavaScript实现从远程MP4、本地摄像头及本地上传的MP4文件中截取视频帧,并展示了具体的实现步骤和示例代码。 ... [详细]
  • 包含phppdoerrorcode的词条 ... [详细]
  • 重要知识点有:函数参数默许值、盈余参数、扩大运算符、new.target属性、块级函数、箭头函数以及尾挪用优化《深切明白ES6》笔记目次函数的默许参数在ES5中,我们给函数传参数, ... [详细]
  • 本文介绍了如何利用 `matplotlib` 库中的 `FuncAnimation` 类将 Python 中的动态图像保存为视频文件。通过详细解释 `FuncAnimation` 类的参数和方法,文章提供了多种实用技巧,帮助用户高效地生成高质量的动态图像视频。此外,还探讨了不同视频编码器的选择及其对输出文件质量的影响,为读者提供了全面的技术指导。 ... [详细]
  • 在JavaWeb开发中,文件上传是一个常见的需求。无论是通过表单还是其他方式上传文件,都必须使用POST请求。前端部分通常采用HTML表单来实现文件选择和提交功能。后端则利用Apache Commons FileUpload库来处理上传的文件,该库提供了强大的文件解析和存储能力,能够高效地处理各种文件类型。此外,为了提高系统的安全性和稳定性,还需要对上传文件的大小、格式等进行严格的校验和限制。 ... [详细]
  • 在本文中,我们将详细介绍如何构建一个用于自动回复消息的XML类。当微信服务器接收到用户消息时,该类将生成相应的自动回复消息。以下是具体的代码实现:```phpclass We_Xml { // 代码内容}```通过这个类,开发者可以轻松地处理各种消息类型,并实现高效的自动回复功能。我们将深入探讨类的各个方法和属性,帮助读者更好地理解和应用这一技术。 ... [详细]
  • CTF竞赛中文件上传技巧与安全绕过方法深入解析
    CTF竞赛中文件上传技巧与安全绕过方法深入解析 ... [详细]
  • 本文介绍了如何在iOS平台上使用GLSL着色器将YV12格式的视频帧数据转换为RGB格式,并展示了转换后的图像效果。通过详细的技术实现步骤和代码示例,读者可以轻松掌握这一过程,适用于需要进行视频处理的应用开发。 ... [详细]
  • 本文介绍了一种利用PHP cURL库高效提取Sohu邮箱联系人列表的方法。通过设置错误报告级别、定义Cookie文件路径等关键步骤,确保了代码的稳定性和可靠性。经过实际测试,该方法在2012年3月24日被验证为有效,能够快速准确地获取联系人信息。此外,文章还提供了详细的代码示例和注意事项,帮助开发者更好地理解和应用这一技术。 ... [详细]
author-avatar
心有阳光2502937567_240
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有