Javascript 使用多图像预览上载

Javascript 使用多图像预览上载,javascript,jquery,html,Javascript,Jquery,Html,我正在使用以下来源: 到目前为止,我可以上传一张预览图片 <style type="text/css"> .image-preview { width: 200px; height: 200px; position: relative; overflow: hidden; background-color: #000000; color: #ecf0f1; } input[type="file"] { line-height: 200px; f

我正在使用以下来源: 到目前为止,我可以上传一张预览图片

<style type="text/css">
.image-preview {
  width: 200px;
  height: 200px;
  position: relative;
  overflow: hidden;
  background-color: #000000;
  color: #ecf0f1;
}
input[type="file"] {
    line-height: 200px;
    font-size: 200px;
    position: absolute;
    opacity: 0;
    z-index: 10;
}
  label {
    position: absolute;
    z-index: 5;
    opacity: 0.7;
    cursor: pointer;
    background-color: #bdc3c7;
    width: 200px;
    height: 50px;
    font-size: 20px;
    line-height: 50px;
    text-transform: uppercase;
    top: 0;
    left: 0;
    right: 0;
    bottom: 0;
    margin: auto;
    text-align: center;
  }

</style>

<script type="text/javascript">
$(document).ready(function() {

    $("image-preview").each(
        function(){
                $.uploadPreview({
                    input_field: $(this).find(".image-upload"),
                    preview_box: this,
                    label_field: $(this).find(".image-label")
                });
        }
    );
});
</script>
<!--| catatan penting: yang penting action="" & input type="file" name="image" |-->
<form action="upload.php" method="POST" enctype="multipart/form-data">
    <div class="image-preview">
        <label for="image-upload" class="image-label">+ GAMBAR</label>
        <input type="file" name="my_field[]" class="image-upload" />
    </div>
    <div class="image-preview">
        <label for="image-upload" class="image-label">+ GAMBAR</label>
        <input type="file" name="my_field[]" class="image-upload" />
    </div>
    <input type="submit"/>
</form>

.图像预览{
宽度:200px;
高度:200px;
位置:相对位置;
溢出:隐藏;
背景色:#000000;
颜色:#ecf0f1;
}
输入[type=“file”]{
线高:200px;
字体大小:200px;
位置:绝对位置;
不透明度:0;
z指数:10;
}
标签{
位置:绝对位置;
z指数:5;
不透明度:0.7;
光标:指针;
背景色:#bdc3c7;
宽度:200px;
高度:50px;
字体大小:20px;
线高:50px;
文本转换:大写;
排名:0;
左:0;
右:0;
底部:0;
保证金:自动;
文本对齐:居中;
}
$(文档).ready(函数(){
$(“图像预览”)。每个(
函数(){
$.uploadPreview({
输入字段:$(此).find(“.image upload”),
预览框:这个,
label_字段:$(this.find(“.image label”)
});
}
);
});
+甘巴尔
+甘巴尔
然后尝试添加更多的div类图像预览,我想添加另一个带有图像预览的按钮我不希望一个按钮就能上传多个文件。


$(文档).ready(函数(){$.uploadPreview
=>使用id,当然,当更改为类并添加更多div时,当上载按钮时,另一个按钮将更改。我对逻辑感到困惑。有人可以帮助吗?可能使用数组,但我不知道如何使用..

我创建了一个简单的图像上载index.html文件,用于图像上载和预览

需要j-query,不需要额外的插件。 如果你有任何问题,请问我;)

//要预览图像,您只需要这些代码行

var imageId=idOfClicked;
var output = document.getElementById(imageId);
output.src = URL.createObjectURL(event.target.files[0]);
请在此处查看:


我创建了一个简单的图像上传index.html文件,用于图像上传和预览

需要j-query,不需要额外的插件。 如果你有任何问题,请问我;)

//要预览图像,您只需要这些代码行

var imageId=idOfClicked;
var output = document.getElementById(imageId);
output.src = URL.createObjectURL(event.target.files[0]);
请在此处查看:


我有一个更好的文件上传选项,它很容易使用,你可以试试

window.onload = function(){   
    if(window.File && window.FileList && window.FileReader){
        $(document).on("change",'.file', function(event) {
            var files = event.target.files; //FileList object
            var output = document.getElementById("upload-preview");
            $("#upload-preview").html("");
            if(files.length>5){
                $(".file").after("<div class='alert alert-error'><span class='close'></span>Maximum 5 files can be uploaded.</div>");
                $(this).val("");
                return false;
            }
            else{
                $(".file").next(".alert").remove();
            }
            for(var i = 0; i< files.length; i++)
            {
                var file = files[i];
                //Only pics 
                // if(!file.type.match('image'))
                if(file.type.match('image.*')){
                    if(this.files[0].size < 2097152){    
                  // continue;
                    var picReader = new FileReader();
                    picReader.addEventListener("load",function(event){
                        var picFile = event.target;
                        var div = document.createElement("div");
                        div.className = "upload-preview-thumb";
                        div.style.backgroundImage = 'url('+picFile.result+')';
                        output.insertBefore(div,null);            
                    });
                    //Read the image
                    $('#clear, #upload-preview').show();
                    picReader.readAsDataURL(file);
                    }else{
                        alert("Image Size is too big. Minimum size is 1MB.");
                        $(this).val("");
                    }
                }else{
                alert("You can only upload image file.");
                $(this).val("");
            }
            }
        });
        $(".file2").change(function(event){
            var err=0;
            var input = $(event.currentTarget);
            var ele = $(this);
            var file = input[0].files[0];
            var u = URL.createObjectURL(this.files[0]);

            var w = ele.attr("data-width");
            var h = ele.attr("data-height");
            var img = new Image;

            img.onload = function(){
                if(w){
                    if(img.width!=w || img.height!=h){
                        ele.parent().find(".alert").remove();
                        ele.parent().find(".upload-preview").before("<div class='alert alert-error'>Please upload a image with specified dimensions.</div>");
                        ele.val("");
                    }
                    else{
                        ele.parent().find(".alert").remove();
                    }
                }
            };

            img.src = u;

            var nh;
            if($(this).attr('data-preview')=='full')
                nh = (h/w*150)
            else
                nh=150

            var preview = ele.parent().find(".upload-preview");
            var reader = new FileReader();
            preview.show();
            reader.onload = function(e){
                image_base64 = e.target.result;
                preview.html("<div class='upload-preview-thumb' style='height:"+nh+"px;background-image:url("+image_base64+")'/><div>");
            };
            reader.readAsDataURL(file);
        });

    }
    else
    {
        console.log("Your browser does not support File API");
    }
}
希望这能起作用,将来对你有帮助


谢谢。

我有一个更好的文件上传选项,它很容易使用,你可以试试

window.onload = function(){   
    if(window.File && window.FileList && window.FileReader){
        $(document).on("change",'.file', function(event) {
            var files = event.target.files; //FileList object
            var output = document.getElementById("upload-preview");
            $("#upload-preview").html("");
            if(files.length>5){
                $(".file").after("<div class='alert alert-error'><span class='close'></span>Maximum 5 files can be uploaded.</div>");
                $(this).val("");
                return false;
            }
            else{
                $(".file").next(".alert").remove();
            }
            for(var i = 0; i< files.length; i++)
            {
                var file = files[i];
                //Only pics 
                // if(!file.type.match('image'))
                if(file.type.match('image.*')){
                    if(this.files[0].size < 2097152){    
                  // continue;
                    var picReader = new FileReader();
                    picReader.addEventListener("load",function(event){
                        var picFile = event.target;
                        var div = document.createElement("div");
                        div.className = "upload-preview-thumb";
                        div.style.backgroundImage = 'url('+picFile.result+')';
                        output.insertBefore(div,null);            
                    });
                    //Read the image
                    $('#clear, #upload-preview').show();
                    picReader.readAsDataURL(file);
                    }else{
                        alert("Image Size is too big. Minimum size is 1MB.");
                        $(this).val("");
                    }
                }else{
                alert("You can only upload image file.");
                $(this).val("");
            }
            }
        });
        $(".file2").change(function(event){
            var err=0;
            var input = $(event.currentTarget);
            var ele = $(this);
            var file = input[0].files[0];
            var u = URL.createObjectURL(this.files[0]);

            var w = ele.attr("data-width");
            var h = ele.attr("data-height");
            var img = new Image;

            img.onload = function(){
                if(w){
                    if(img.width!=w || img.height!=h){
                        ele.parent().find(".alert").remove();
                        ele.parent().find(".upload-preview").before("<div class='alert alert-error'>Please upload a image with specified dimensions.</div>");
                        ele.val("");
                    }
                    else{
                        ele.parent().find(".alert").remove();
                    }
                }
            };

            img.src = u;

            var nh;
            if($(this).attr('data-preview')=='full')
                nh = (h/w*150)
            else
                nh=150

            var preview = ele.parent().find(".upload-preview");
            var reader = new FileReader();
            preview.show();
            reader.onload = function(e){
                image_base64 = e.target.result;
                preview.html("<div class='upload-preview-thumb' style='height:"+nh+"px;background-image:url("+image_base64+")'/><div>");
            };
            reader.readAsDataURL(file);
        });

    }
    else
    {
        console.log("Your browser does not support File API");
    }
}
希望这能起作用,将来对你有帮助


谢谢。

因为上传按钮取决于上传预览的状态,所以您需要分别初始化每个div以获得单独的上传按钮。 像这样更改html,给每个容器一个类,比如imgBox

<div class="imgBox">
 <label for="image-upload" class="image-label">Choose File</label>
 <input type="file" name="image" class="image-upload" />
</div>
.....
....
...
<div class="imgBox">
 <label for="image-upload" class="image-label">Choose File</label>
 <input type="file" name="image" class="image-upload" />
</div>

由于upload按钮取决于uploadPreview的状态,所以您需要分别为每个div初始化以获得单独的upload按钮。 像这样更改html,给每个容器一个类,比如imgBox

<div class="imgBox">
 <label for="image-upload" class="image-label">Choose File</label>
 <input type="file" name="image" class="image-upload" />
</div>
.....
....
...
<div class="imgBox">
 <label for="image-upload" class="image-label">Choose File</label>
 <input type="file" name="image" class="image-upload" />
</div>

我喜欢这段代码。但在我的代码中,我与file:class.upload.php结合使用,通常使用:form action和name for:input type=“file”。在你的代码中,我只是看了看1,它没有名字。如何将文件上载和处理到存储器我喜欢这段代码。但在我的代码中,我与file:class.upload.php结合使用,通常使用:form action和name for:input type=“file”。在你的代码中,我只是看了看1它没有名字。如何将文件上载和处理到存储器应该输入什么://perview generate here//如果上载,你也可以在这里显示图像。在编辑图像部分抛出php条件,它不显示自定义上载按钮。现在没有任何内容放在那里。如果插入但是当你使用同一个页面进行编辑时,如果你发现了旧数据,你可以将图像标记放在那里,然后在图像标记中填充该图像,其他明智的图像标记不显示类似的内容。请尝试类文件而不是文件2。并确保jquery核心文件附件。在输入类型之后添加图像预览html。应该输入什么t://perview generate here//如果上传,你也可以在这里显示图像。在编辑图像部分抛出php条件,它不显示自定义上传按钮。现在没有任何东西放在那里。还有其他东西。如果你插入图像。但是当你使用同一页面进行编辑时,如果你发现旧数据,你可以在那里放置图像标签,然后填充它图像中的图像标记other wise图像标记不显示类似的内容。请尝试类文件而不是文件2。并确保jquery核心文件附件。在输入类型之后添加图像预览html。我尝试了,但仍然不工作。您可以查看上面的代码,我编辑了它。我尝试了,但仍然不工作。您可以查看上面的代码,我编辑了我T
<div class="imgBox">
 <label for="image-upload" class="image-label">Choose File</label>
 <input type="file" name="image" class="image-upload" />
</div>
.....
....
...
<div class="imgBox">
 <label for="image-upload" class="image-label">Choose File</label>
 <input type="file" name="image" class="image-upload" />
</div>
 $(".imgBox").each(
            function(){
                $.uploadPreview({
                input_field: $(this).find(".image-upload"),
                preview_box: this,
                label_field: $(this).find(".image-label")
            });
});