<code><!DOCTYPE html> <html> <head> <meta charset="utf-8"> <meta name="viewport" content="width=device-width,initial-scale=1,minimum-scale=1,maximum-scale=1,user-scalable=no" /> <title></title> <script src="js/mui.min.js"></script> <script src="js/jquery1.42.min.js"></script> <script type="text/javascript" src="js/mui.min.js"></script> <link href="css/mui.min.css" rel="stylesheet" /> <script type="text/javascript" charset="utf-8"> mui.init(); </script> <style> body { font-family: "Helvetica Neue", Helvetica, sans-serif; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); background: #E6E6E6; margin: 0px; } </style> <script type="text/javascript"> var files = []; var i = 1, gentry = null, w = null; var hl = null, le = null, de = null; var f1 = null; var f2 = null; // 监听DOMContentLoaded事件 document.addEventListener("DOMContentLoaded", function() { // 获取DOM元素对象 hl = document.getElementById("history"); le = document.getElementById("empty"); }, false); // 上传文件 function upload() { if(files.length <= 0) { plus.nativeUI.alert("没有添加上传文件!"); return; } if(files.length < 2) { f1 = files[0].pic; f2 = ""; } else { f1 = files[0].pic; f2 = files[1].pic; } var wt = plus.nativeUI.showWaiting(); var url = 'http://demo.dcloud.net.cn/helloh5/uploader/upload.php'; //预期服务器范围的数据类型 var dataType = 'json'; //发送数据 var data = { files1: f1, files2: f2 }; $.post(url, data, success, dataType); } //成功响应的回调函数 var success = function(response) { plus.nativeUI.closeWaiting(); if(response != null) { alert("上传成功"); } } // 拍照 function getImage() { var cmr = plus.camera.getCamera(); cmr.captureImage(function(p) { plus.io.resolveLocalFileSystemURL(p, function(entry) { if(files.length < 2) { createItem(entry); appendFile(p); } }); }, function(error) { alert("Capture image failed: " + error.message); }, { filename: "file:///storage/sdcard0/DCIM/Camera/" + "ra/" } //改变一下拍照的路径,名字 ); } // 从相册添加文件 function appendByGallery() { plus.gallery.pick(function(path) { plus.io.resolveLocalFileSystemURL(path, function(entry) { if(files.length < 2) { createItem(entry); appendFile(path); } }); }); } // 添加文件 var index = 1; function appendFile(path) { var img = new Image(); img.src = path; img.onload = function() { var that = this; //生成比例 var w = that.width, h = that.height, scale = w / h; w = 50 || w; //480 你想压缩到多大 h = w / scale; //生成canvas var canvas = document.createElement('canvas'); var ctx = canvas.getContext('2d'); $(canvas).attr({ width: w, height: h }); ctx.drawImage(that, 0, 0, w, h); var base64 = canvas.toDataURL('image/jpeg', 1 || 0.8); //1z 表示图片质量,越低越模糊。 // alert(base64); files.push({ name: "file" + index, pic: base64 }); // 把base64数据丢进数组,上传要用。 index++; var pic = document.getElementById("x"); pic.src = base64; //这里丢到img 的 src 里面就能看到效果了 } } // 显示文件 function displayFile(li) { var name = li.entry.name; var suffix = name.substr(name.lastIndexOf('.')); var url = ""; url = "examples/camera_image.html"; // w = plus.webview.create(url, url, { scrollIndicator: 'none', scalable: true, bounce: "all" }); w.addEventListener("loaded", function() { w.evalJS("loadMedia('" + li.entry.toLocalURL() + "')"); // //w.evalJS( "loadMedia(\""+"http://localhost:13131/_doc/camera/"+name+"\")" ); }, false); w.addEventListener("close", function() { w = null; }, false); w.show("slide-in-right", 300); } // 添加播放项 function createItem(entry) { var li = document.createElement("li"); li.className = "ditem"; li.innerHTML = '<span class="iplay"><font class="aname"></font><br/><font class="ainf"></font></span>'; li.setAttribute("onclick", "displayFile(this);"); hl.insertBefore(li, le.nextSibling); li.querySelector(".aname").innerText = entry.name; li.entry = entry; // 设置空项不可见 le.style.display = "none"; } // 清除历史记录 function cleanHistory() { hl.innerHTML = '<li id="empty" class="ditem-empty">暂无照片</li>'; le = document.getElementById("empty"); files.splice(0, files.length); } </script> </head> <body> <div id="dcontent" class="long-dcontent"> <table class="long-table"> <tbody> <span style="margin: 0 0 10px 0px;color: #6c6c6c;">照片</span> <tr> <td style="background: #fff;text-align: center;color:#9B9B9B;width:40%"> <div class="button button-select pz" onclick="getImage()"><img src="../images/pz.png" style="margin: 10px 20px; " />拍摄照片</div> </td> <td style="width:10%"></td> <td style="background: #fff;text-align: center;color:#9B9B9B;width:40%"> <div class="button button-select pz" onclick="appendByGallery()"><img src="../images/pz.png" style="margin: 10px 20px; " />选择照片</div> </td> </tr> </tbody> </table> <p class="heading" style="color: #6c6c6c;">照片预览:</p> <div id="history" class="dlist" style="text-align:left;"> <li id="empty" class="ditem-empty" style="list-style-type:none; ">暂无照片</li> </div> <br/> <div class="b-waring" onclick="cleanHistory();" style="border: 1px solid #999999;margin: 10px;padding:10px 0 ;text-align: center;">清空照片</div> <br/> <div class="button long-btn" onclick="upload()" style="border: 1px solid #999999;margin: 10px;padding:10px 0 ;text-align: center;">上传</div> <br/> </div> <img src="" id="x" /> </body> </html></code>
<code><!DOCTYPE html> <html> <head> <meta charset="utf-8"> <meta name="viewport" content="width=device-width,initial-scale=1,minimum-scale=1,maximum-scale=1,user-scalable=no" /> <title></title> <script src="js/mui.min.js"></script> <script src="js/jquery1.42.min.js"></script> <script type="text/javascript" src="js/mui.min.js"></script> <link href="css/mui.min.css" rel="stylesheet" /> <script type="text/javascript" charset="utf-8"> mui.init(); </script> <style> body { font-family: "Helvetica Neue", Helvetica, sans-serif; -webkit-tap-highlight-color: rgba(0, 0, 0, 0); background: #E6E6E6; margin: 0px; } </style> <script type="text/javascript"> var files = []; var i = 1, gentry = null, w = null; var hl = null, le = null, de = null; var f1 = null; var f2 = null; // 监听DOMContentLoaded事件 document.addEventListener("DOMContentLoaded", function() { // 获取DOM元素对象 hl = document.getElementById("history"); le = document.getElementById("empty"); }, false); // 上传文件 function upload() { if(files.length <= 0) { plus.nativeUI.alert("没有添加上传文件!"); return; } if(files.length < 2) { f1 = files[0].pic; f2 = ""; } else { f1 = files[0].pic; f2 = files[1].pic; } var wt = plus.nativeUI.showWaiting(); var url = 'http://demo.dcloud.net.cn/helloh5/uploader/upload.php'; //预期服务器范围的数据类型 var dataType = 'json'; //发送数据 var data = { files1: f1, files2: f2 }; $.post(url, data, success, dataType); } //成功响应的回调函数 var success = function(response) { plus.nativeUI.closeWaiting(); if(response != null) { alert("上传成功"); } } // 拍照 function getImage() { var cmr = plus.camera.getCamera(); cmr.captureImage(function(p) { plus.io.resolveLocalFileSystemURL(p, function(entry) { if(files.length < 2) { createItem(entry); appendFile(p); } }); }, function(error) { alert("Capture image failed: " + error.message); }, { filename: "file:///storage/sdcard0/DCIM/Camera/" + "ra/" } //改变一下拍照的路径,名字 ); } // 从相册添加文件 function appendByGallery() { plus.gallery.pick(function(path) { plus.io.resolveLocalFileSystemURL(path, function(entry) { if(files.length < 2) { createItem(entry); appendFile(path); } }); }); } // 添加文件 var index = 1; function appendFile(path) { var img = new Image(); img.src = path; img.onload = function() { var that = this; //生成比例 var w = that.width, h = that.height, scale = w / h; w = 50 || w; //480 你想压缩到多大 h = w / scale; //生成canvas var canvas = document.createElement('canvas'); var ctx = canvas.getContext('2d'); $(canvas).attr({ width: w, height: h }); ctx.drawImage(that, 0, 0, w, h); var base64 = canvas.toDataURL('image/jpeg', 1 || 0.8); //1z 表示图片质量,越低越模糊。 // alert(base64); files.push({ name: "file" + index, pic: base64 }); // 把base64数据丢进数组,上传要用。 index++; var pic = document.getElementById("x"); pic.src = base64; //这里丢到img 的 src 里面就能看到效果了 } } // 显示文件 function displayFile(li) { var name = li.entry.name; var suffix = name.substr(name.lastIndexOf('.')); var url = ""; url = "examples/camera_image.html"; // w = plus.webview.create(url, url, { scrollIndicator: 'none', scalable: true, bounce: "all" }); w.addEventListener("loaded", function() { w.evalJS("loadMedia('" + li.entry.toLocalURL() + "')"); // //w.evalJS( "loadMedia(\""+"http://localhost:13131/_doc/camera/"+name+"\")" ); }, false); w.addEventListener("close", function() { w = null; }, false); w.show("slide-in-right", 300); } // 添加播放项 function createItem(entry) { var li = document.createElement("li"); li.className = "ditem"; li.innerHTML = '<span class="iplay"><font class="aname"></font><br/><font class="ainf"></font></span>'; li.setAttribute("onclick", "displayFile(this);"); hl.insertBefore(li, le.nextSibling); li.querySelector(".aname").innerText = entry.name; li.entry = entry; // 设置空项不可见 le.style.display = "none"; } // 清除历史记录 function cleanHistory() { hl.innerHTML = '<li id="empty" class="ditem-empty">暂无照片</li>'; le = document.getElementById("empty"); files.splice(0, files.length); } </script> </head> <body> <div id="dcontent" class="long-dcontent"> <table class="long-table"> <tbody> <span style="margin: 0 0 10px 0px;color: #6c6c6c;">照片</span> <tr> <td style="background: #fff;text-align: center;color:#9B9B9B;width:40%"> <div class="button button-select pz" onclick="getImage()"><img src="../images/pz.png" style="margin: 10px 20px; " />拍摄照片</div> </td> <td style="width:10%"></td> <td style="background: #fff;text-align: center;color:#9B9B9B;width:40%"> <div class="button button-select pz" onclick="appendByGallery()"><img src="../images/pz.png" style="margin: 10px 20px; " />选择照片</div> </td> </tr> </tbody> </table> <p class="heading" style="color: #6c6c6c;">照片预览:</p> <div id="history" class="dlist" style="text-align:left;"> <li id="empty" class="ditem-empty" style="list-style-type:none; ">暂无照片</li> </div> <br/> <div class="b-waring" onclick="cleanHistory();" style="border: 1px solid #999999;margin: 10px;padding:10px 0 ;text-align: center;">清空照片</div> <br/> <div class="button long-btn" onclick="upload()" style="border: 1px solid #999999;margin: 10px;padding:10px 0 ;text-align: center;">上传</div> <br/> </div> <img src="" id="x" /> </body> </html></code>
업로드 성공 경로를 PHP(서버)에서 브라우저(클라이언트 서버)로 반환
이미지를 미리 보려면 서버측 업로드가 성공한 후 이미지 주소를 프런트엔드에 반환하고 프런트엔드에 이미지가 표시됩니다.
<code>这样可以在浏览器生成图片的地址提前预览 不需要等到服务器返回地址 function getObjectURL(file) { var url = null; if (window.createObjectURL != undefined) { // ie url = window.createObjectURL(file); } else if (window.URL != undefined) { // 火狐 url = window.URL.createObjectURL(file); } else if (window.webkitURL != undefined) { // 谷歌 url = window.webkitURL.createObjectURL(file); } return url; }</code>
이미지가 성공적으로 업로드된 후 백엔드는 성공 정보를 반환해야 합니다.
자세한 내용은 백엔드와 논의가 필요합니다.
어떤 매개변수가 반환되는지 보려면 API
인터페이스 문서를 살펴보세요. 사용해야 하는 경우 백엔드와 통신하기만 하면 됩니다.
이미지 경로를 데이터베이스에 저장한 후 읽어보세요
보통 백엔드는 프론트엔드로의 경로를 반환하는데, 백엔드가 어떤 문제를 일으키게 될까요
일반적으로 백엔드에서 URL을 생성합니다. 응답이 무엇인지 물어보고 입력하거나 백엔드 개발자에게 직접 문의할 수 있습니다.
업로드 인터페이스를 통해 이미지를 업로드하면 일반적으로 인터페이스에서 다음과 같은 관련 데이터가 반환됩니다.
<code>{data:{status:1,imgPath:"/xxx/xx.png"}}</code>
업로드 상태(업로드 성공, 업로드 실패), imgPath는 일반적으로 업로드가 성공한 경우 이미지에 액세스할 수 있는 주소를 제공합니다.
반환된 이미지 주소를 통해 이미지에 접근하실 수 있습니다