>  기사  >  백엔드 개발  >  javascript - 이미지를 서버에 업로드했는데 브라우저에서 이미지에 접근하는 방법을 모르겠습니다

javascript - 이미지를 서버에 업로드했는데 브라우저에서 이미지에 접근하는 방법을 모르겠습니다

WBOY
WBOY원래의
2016-12-01 00:26:002624검색

<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>

javascript - 이미지를 서버에 업로드했는데 브라우저에서 이미지에 접근하는 방법을 모르겠습니다

답글 내용:

<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>

javascript - 이미지를 서버에 업로드했는데 브라우저에서 이미지에 접근하는 방법을 모르겠습니다

업로드 성공 경로를 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는 일반적으로 업로드가 성공한 경우 이미지에 액세스할 수 있는 주소를 제공합니다.

반환된 이미지 주소를 통해 이미지에 접근하실 수 있습니다

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.