Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/79.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 上传带有预览的图像_Javascript_Jquery_Html_Css - Fatal编程技术网

Javascript 上传带有预览的图像

Javascript 上传带有预览的图像,javascript,jquery,html,css,Javascript,Jquery,Html,Css,Im正在为论坛用户创建上传功能,以便他们可以上传个人图片。到目前为止,我得到的是: HTML <label>Profile image</label> <div class="photo" id="photoPreview"></div> <input type="file" value="forumPhoto" onchange="return changePhoto(this);"> Profile图像 JAVASCRIPT f

Im正在为论坛用户创建上传功能,以便他们可以上传个人图片。到目前为止,我得到的是:

HTML

<label>Profile image</label>
<div class="photo" id="photoPreview"></div>
<input type="file" value="forumPhoto" onchange="return changePhoto(this);">
Profile图像
JAVASCRIPT

function showPhotoPreview() {
    var photoUrl = $.trim($("#photo").val());
    var img = $("#photoPreview img");
    if (photoUrl != "") {
        if (img.length == 0) {
            img = $("<img />").appendTo($("#photoPreview"));
        }
        img.prop("src", photoUrl);
    }
    else {
        img.remove();
    }
}

function changePhoto(sender) {
    var value = $(sender).val();
    sender.selectedIndex = 0;
    switch (value) {
        case "upload":
            assignPicture();
            break;
    }
    showPhotoPreview();
    return false;
}

function assignPicture() {
    var forumPhoto = $("#forumPhoto").val();
    if (forumPhoto == "") {
        alert("You must specify an address to use forumPhoto.");
        return;
    }
    $("#photo").val(forumPhoto);
}
函数showPhotoPreview(){
var photoUrl=$.trim($(“#photo”).val();
var img=$(“#照片预览img”);
如果(photoUrl!=“”){
如果(img.length==0){
img=$(”
目前的问题是,它没有显示在预览图片中。
jshiddle:

请试一试

HTML:
你要么需要HTML5(文件阅读器),要么需要Flash来完成你想要做的事情。 简单地说,Javascript/iFrame具有防止处理本地用户文件和在浏览器中查看这些文件的安全性,以防止恶意使用

对于一个使用Mootools 1.3.2的工作示例,您可以自由地将其转换为jQuery。为了处理请求,我必须重写XHR方法,因此您很可能需要对jQuery执行同样的操作。请注意,我检查了FileReader,并删除了不使用它的预览功能

您还可以调整window.FormData方法,以简化上载过程,并在成功时使用服务器源更新映像

HTML:




预览 上传 预览图像:
答复:
Javascript:

//<![CDATA[
        Request.implement({
            options: {
                form: null
            },
            sendFile: function(options){
                if (!this.check(options)) return this;

                this.options.isSuccess = this.options.isSuccess || this.isSuccess;
                this.running = true;

                var type = typeOf(options);
                if (type == 'string' || type == 'element') options = {data: options};

                var old = this.options;
                options = Object.append({data: old.data, url: old.url, method: old.method, form: old.form, sendAsBinary: old.sendAsBinary}, options);
                var data = options.data, url = String(options.url);

                if (!url) url = document.location.pathname;

                var trimPosition = url.lastIndexOf('/');
                if (trimPosition > -1 && (trimPosition = url.indexOf('#')) > -1) url = url.substr(0, trimPosition);

                if (this.options.noCache)
                    url += (url.contains('?') ? '&' : '?') + String.uniqueID();

                var xhr = this.xhr;
                xhr.open("POST", url, this.options.async, this.options.user, this.options.password);
                if (this.options.user && 'withCredentials' in xhr) xhr.withCredentials = true;

                xhr.onreadystatechange = this.onStateChange.bind(this);

                Object.each(this.headers, function(value, key){
                    try {
                        xhr.setRequestHeader(key, value);
                    } catch (e){
                        this.fireEvent('exception', [key, value]);
                    }
                }, this);

                this.fireEvent('request');
                if(options.form){
                    data = new FormData();
                    options.form.getChildren('input').each(function(el){
                        var name = el.get('name'),
                        value = (el.get('type') == 'file')? el.files[0] : el.get('value');
                        data.append(name, value);
                    });
                }
                xhr.send(data);
                if (!this.options.async) this.onStateChange();
                if (this.options.timeout) this.timer = this.timeout.delay(this.options.timeout, this);
                return this;
            }
        });

        addEvent('domready', function(){
            var preview = $('preview'),
            output = $('output'),
            info = $('info'),
            previewWrapper = $('previewWrapper'),
            responseWrapper = $('responseWrapper'),
            previewBtn = $('previewBtn'),
            imageToUpload = $('imageToUpload'),
            wrapper = $('wrapper'),
            uploadBtn = $('uploadBtn'),
            bothBtns = new Elements([uploadBtn, previewBtn]),
            isFileReader = true,
            fileTypes = {
                'jpeg' : true,
                'png' : true,
                'bmp' : true,
                'jpg': true
            },
            fileToUpload = null,
            maxSize =   2986000,
            initReader = function(){
                if(!isFileReader)
                    return false;
                var reader = new FileReader();
                //Chrome doesn't initiatize this - so onload only occurs when the object is created.
                reader.onload = function () {
                    preview.set('src', reader.result);
                    preview.setStyle('display', 'inline');
                };
                return reader;
            },
            testFile = function(fileToUpload){
                if(!(fileTypes[fileToUpload.type.replace('image/', '')])){
                    alert('Please select a valid image.');
                    return false;
                }
                if(fileToUpload.size > maxSize){
                    alert('Filesize limit of ' + maxSize + ' exceeded.');
                    return false;
                }
                return true;
            },
            getPreview = function(e){
                bothBtns.set('disabled', 'disabled');
                preview.set('src', '/assets/img/pixel.gif');

                fileToUpload = $('imageToUpload').files[0];
                if(!fileToUpload)
                    return true;

                info.set('html', '<ul><li><strong>'+ fileToUpload.name + '</strong> (' + (fileToUpload.type || 'N/A') + ') ' + fileToUpload.size + ' bytes</li></ul>');
                if(testFile(fileToUpload)){
                    bothBtns.removeProperty('disabled');
                    var reader = initReader();
                    if(!reader)
                        return true;
                    reader.readAsDataURL(fileToUpload);
                    if(e && e.type != 'submit'){
                        var scroll = previewWrapper.getPosition().y;
                        scrollFx.start(0, scroll);
                    }
                    return true;
                }
                return false;
            },
            scrollFx = new Fx.Scroll(window, {wheelStops: false}),
            myRequest = new Request({
                url: 'processFile.php',
                headers: {
                    'Sender' : 'XMLHttpRequest'
                },
                onRequest: function(){
                    output.set('html', "<p>Loading...</p>");
                    var scroll = responseWrapper.getPosition().y;
                    scrollFx.start(0, scroll);
                },
                onSuccess: function(text){
                    var scroll = responseWrapper.getPosition().y;
                    scrollFx.start(0, scroll);
                    output.set('html', text);
                }
            });

            if(typeof(window.FormData) === 'undefined'){
                $$('#ajaxFileForm, hr, #responseWrapper').dispose();
                wrapper.set('html', '<p>Your browser does not support FormData - For XHR File Uploads</p>');
                return;
            }
            if(typeof(window.FileReader) === 'undefined'){
                isFileReader = false;
                previewBtn.dispose();
                previewWrapper.set('html', '<p>Your browser does not support File API - For Previews</p>');
            }
            $('ajaxFileForm').addEvent('submit', function(e){
                e.stop();
                if(!getPreview(e))
                    return false;
                responseWrapper.setStyle('display', 'block');
                var formData = $('ajaxFileForm');
                myRequest.sendFile({form: formData});
            });
            imageToUpload.addEvent('change', getPreview);
            previewBtn.addEvent('click', getPreview);
            getPreview();
        });
        //]]>
/-1&&(trimPosition=url.indexOf('#'))>-1)url=url.substr(0,trimPosition);
if(this.options.noCache)
url+=(url.contains(“?”)?”&“:“?”)+String.uniqueID();
var xhr=this.xhr;
打开(“POST”、url、this.options.async、this.options.user、this.options.password);
如果(xhr中的this.options.user&&“withCredentials”)xhr.withCredentials=true;
xhr.onreadystatechange=this.onStateChange.bind(this);
Object.each(this.headers,函数(值,键){
试一试{
setRequestHeader(键、值);
}捕获(e){
this.firevent('exception',[key,value]);
}
},这个);
此.firevent(“请求”);
if(options.form){
数据=新表单数据();
options.form.getChildren('input')。每个(函数(el){
var name=el.get('name'),
value=(el.get('type')='file')?el.files[0]:el.get('value');
数据。追加(名称、值);
});
}
发送(数据);
如果(!this.options.async)this.onStateChange();
如果(this.options.timeout)this.timer=this.timeout.delay(this.options.timeout,this);
归还这个;
}
});
addEvent('domready',function(){
变量预览=$(“预览”),
输出=$(“输出”),
info=$('info'),
PreviewRapper=$('PreviewRapper'),
responseWrapper=$('responseWrapper'),
previewBtn=$('previewBtn'),
imageToUpload=$('imageToUpload'),
包装器=$(“包装器”),
uploadBtn=$('uploadBtn'),
bothBtns=新元素([uploadBtn,previewBtn]),
isFileReader=true,
文件类型={
“jpeg”:正确,
‘png’:对,
“bmp”:对,
‘jpg’:对
},
fileToUpload=null,
maxSize=2986000,
initReader=函数(){
如果(!isFileReader)
返回false;
var reader=new FileReader();
//Chrome不会初始化此操作,因此只有在创建对象时才会发生onload。
reader.onload=函数(){
preview.set('src',reader.result);
preview.setStyle('display','inline');
};
返回读取器;
},
testFile=函数(fileToUpload){
if(!(文件类型[fileToUpload.type.replace('image/,'')){
警报('请选择有效的图像');
返回false;
}
如果(fileToUpload.size>maxSize){
警报('超过'+maxSize+'的文件大小限制');
返回false;
}
返回true;
},
getPreview=函数(e){
bothBtns.set('disabled','disabled');
preview.set('src','/assets/img/pixel.gif');
fileToUpload=$('imageToUpload')。文件[0];
如果(!fileToUpload)
返回true;
info.set('html','
  • '+fileToUpload.name+'('+(fileToUpload.type | | | N/A')+'+fileToUpload.size+'字节
); if(testFile(fileToUpload)){ bothBtns.removeProperty(“已禁用”); var reader=initReader(); 如果(!读卡器) 返回true; reader.readAsDataURL(fileToUpload); 如果(e&&e.type!=“提交”){ var scroll=previewRapper.getPosition().y; scrollFx.start(0,滚动); } 返回true; } 返回false; }, scrollFx=new Fx.Scroll(窗口,{wheelStops:false}), myRequest=新请求({ url:'processFile.php', H
function readURL(input) {
    if (input.files && input.files[0]) {
        var reader = new FileReader();

        reader.onload = function(e) {
            $('#img').attr('src', e.target.result;)
        }

        reader.readAsDataURL(input.files[0]);
    }
}

$('#imgInput').change(function() {
    readURL(this);
});
       <div id="wrapper">
            <form id="ajaxFileForm" method="post" action="processFile.php" enctype="multipart/form-data">
                <input id="imageToUpload" name="file" type="file"><br>
                <input name="somefield" type="text" value="Hello World"><br>
                <button id="previewBtn" type="button" disabled="">Preview</button>
                <button id="uploadBtn" type="submit" disabled="">Upload</button>
            </form>
            <div id="previewWrapper">
                <h4>Preview Image:</h4>
                <img style="display:none;" src="/assets/img/pixel.gif" id="preview" alt="Image Preview">
                <div id="info"></div>
            </div>
            <hr style="height:1px; border:0; background: #666;">
            <div id="responseWrapper" style="display: none">
                <h4>Response:</h4>
                <div id="output"></div>
            </div>
        </div>
//<![CDATA[
        Request.implement({
            options: {
                form: null
            },
            sendFile: function(options){
                if (!this.check(options)) return this;

                this.options.isSuccess = this.options.isSuccess || this.isSuccess;
                this.running = true;

                var type = typeOf(options);
                if (type == 'string' || type == 'element') options = {data: options};

                var old = this.options;
                options = Object.append({data: old.data, url: old.url, method: old.method, form: old.form, sendAsBinary: old.sendAsBinary}, options);
                var data = options.data, url = String(options.url);

                if (!url) url = document.location.pathname;

                var trimPosition = url.lastIndexOf('/');
                if (trimPosition > -1 && (trimPosition = url.indexOf('#')) > -1) url = url.substr(0, trimPosition);

                if (this.options.noCache)
                    url += (url.contains('?') ? '&' : '?') + String.uniqueID();

                var xhr = this.xhr;
                xhr.open("POST", url, this.options.async, this.options.user, this.options.password);
                if (this.options.user && 'withCredentials' in xhr) xhr.withCredentials = true;

                xhr.onreadystatechange = this.onStateChange.bind(this);

                Object.each(this.headers, function(value, key){
                    try {
                        xhr.setRequestHeader(key, value);
                    } catch (e){
                        this.fireEvent('exception', [key, value]);
                    }
                }, this);

                this.fireEvent('request');
                if(options.form){
                    data = new FormData();
                    options.form.getChildren('input').each(function(el){
                        var name = el.get('name'),
                        value = (el.get('type') == 'file')? el.files[0] : el.get('value');
                        data.append(name, value);
                    });
                }
                xhr.send(data);
                if (!this.options.async) this.onStateChange();
                if (this.options.timeout) this.timer = this.timeout.delay(this.options.timeout, this);
                return this;
            }
        });

        addEvent('domready', function(){
            var preview = $('preview'),
            output = $('output'),
            info = $('info'),
            previewWrapper = $('previewWrapper'),
            responseWrapper = $('responseWrapper'),
            previewBtn = $('previewBtn'),
            imageToUpload = $('imageToUpload'),
            wrapper = $('wrapper'),
            uploadBtn = $('uploadBtn'),
            bothBtns = new Elements([uploadBtn, previewBtn]),
            isFileReader = true,
            fileTypes = {
                'jpeg' : true,
                'png' : true,
                'bmp' : true,
                'jpg': true
            },
            fileToUpload = null,
            maxSize =   2986000,
            initReader = function(){
                if(!isFileReader)
                    return false;
                var reader = new FileReader();
                //Chrome doesn't initiatize this - so onload only occurs when the object is created.
                reader.onload = function () {
                    preview.set('src', reader.result);
                    preview.setStyle('display', 'inline');
                };
                return reader;
            },
            testFile = function(fileToUpload){
                if(!(fileTypes[fileToUpload.type.replace('image/', '')])){
                    alert('Please select a valid image.');
                    return false;
                }
                if(fileToUpload.size > maxSize){
                    alert('Filesize limit of ' + maxSize + ' exceeded.');
                    return false;
                }
                return true;
            },
            getPreview = function(e){
                bothBtns.set('disabled', 'disabled');
                preview.set('src', '/assets/img/pixel.gif');

                fileToUpload = $('imageToUpload').files[0];
                if(!fileToUpload)
                    return true;

                info.set('html', '<ul><li><strong>'+ fileToUpload.name + '</strong> (' + (fileToUpload.type || 'N/A') + ') ' + fileToUpload.size + ' bytes</li></ul>');
                if(testFile(fileToUpload)){
                    bothBtns.removeProperty('disabled');
                    var reader = initReader();
                    if(!reader)
                        return true;
                    reader.readAsDataURL(fileToUpload);
                    if(e && e.type != 'submit'){
                        var scroll = previewWrapper.getPosition().y;
                        scrollFx.start(0, scroll);
                    }
                    return true;
                }
                return false;
            },
            scrollFx = new Fx.Scroll(window, {wheelStops: false}),
            myRequest = new Request({
                url: 'processFile.php',
                headers: {
                    'Sender' : 'XMLHttpRequest'
                },
                onRequest: function(){
                    output.set('html', "<p>Loading...</p>");
                    var scroll = responseWrapper.getPosition().y;
                    scrollFx.start(0, scroll);
                },
                onSuccess: function(text){
                    var scroll = responseWrapper.getPosition().y;
                    scrollFx.start(0, scroll);
                    output.set('html', text);
                }
            });

            if(typeof(window.FormData) === 'undefined'){
                $$('#ajaxFileForm, hr, #responseWrapper').dispose();
                wrapper.set('html', '<p>Your browser does not support FormData - For XHR File Uploads</p>');
                return;
            }
            if(typeof(window.FileReader) === 'undefined'){
                isFileReader = false;
                previewBtn.dispose();
                previewWrapper.set('html', '<p>Your browser does not support File API - For Previews</p>');
            }
            $('ajaxFileForm').addEvent('submit', function(e){
                e.stop();
                if(!getPreview(e))
                    return false;
                responseWrapper.setStyle('display', 'block');
                var formData = $('ajaxFileForm');
                myRequest.sendFile({form: formData});
            });
            imageToUpload.addEvent('change', getPreview);
            previewBtn.addEvent('click', getPreview);
            getPreview();
        });
        //]]>