如何使用Javascript / HTML上传简单的图片


70

是否有人知道如何进行简单的图像上传并将其显示在页面上。

这就是我要的东西。

  • 用户(我)将选择一张图片
  • 该页面将显示图像,而无需刷新页面或转到另一个文件。
  • 倍数即可<img src>,因为我需要显示不同的图像尺寸。

这是我的代码。(其中一些是我从这里得到的编辑)

<style>
    /* Image Designing Propoerties */
    .thumb {
        height: 75px;
        border: 1px solid #000;
        margin: 10px 5px 0 0;
    }
</style>

<script type="text/javascript">
    /* The uploader form */
    $(function () {
        $(":file").change(function () {
            if (this.files && this.files[0]) {
                var reader = new FileReader();

                reader.onload = imageIsLoaded;
                reader.readAsDataURL(this.files[0]);
            }
        });
    });

    function imageIsLoaded(e) {
        $('#myImg').attr('src', e.target.result);
        $('#yourImage').attr('src', e.target.result);
    };

</script>


<input type='file' />
</br><img id="myImg" src="#" alt="your image" height=200 width=100>

您是否尝试过使用插件/库?例如,Dropzone
aroth 2014年

不,我想我现在不需要。

@aroth。您知道这段代码似乎是什么问题吗?为什么我的图像没有出现?

3
该代码将引发书面错误。清理后,它对我来说很好。请参阅: jsfiddle.net/bPUkC/2。还要注意,尽管这会在页面上显示图像,但实际上并没有上传图像。
aroth

看起来很不错,可以工作。但是,当我尝试将其复制并粘贴到编辑器中并尝试浏览时。它对我不起作用。:(

Answers:


50

这是一个没有jQuery的简单示例。使用URL.createObjectURL

创建一个DOMString,该URL包含表示参数中给定对象的URL

然后,您只需将src图片的设置为该网址:

window.addEventListener('load', function() {
  document.querySelector('input[type="file"]').addEventListener('change', function() {
      if (this.files && this.files[0]) {
          var img = document.querySelector('img');  // $('img')[0]
          img.src = URL.createObjectURL(this.files[0]); // set src to blob url
          img.onload = imageIsLoaded;
      }
  });
});

function imageIsLoaded() { 
  alert(this.src);  // blob url
  // update width and height ...
}
<input type='file' />
<br><img id="myImg" src="#" alt="your image" height=200 width=100>


1
还可以使用react和非常简单的解决方案
Bhaumik Bhatt

在图像上设置源之前,最好附上onload事件侦听器。
vrugtehagel

11

试试这个,它支持多文件上传,

$('#multi_file_upload').change(function(e) {
    var file_id = e.target.id;

    var file_name_arr = new Array();
    var process_path = site_url + 'public/uploads/';

    for (i = 0; i < $("#" + file_id).prop("files").length; i++) {

        var form_data = new FormData();
        var file_data = $("#" + file_id).prop("files")[i];
        form_data.append("file_name", file_data);

        if (check_multifile_logo($("#" + file_id).prop("files")[i]['name'])) {
            $.ajax({
                //url         :   site_url + "inc/upload_image.php?width=96&height=60&show_small=1",
                url: site_url + "inc/upload_contact_info.php",
                cache: false,
                contentType: false,
                processData: false,
                async: false,
                data: form_data,
                type: 'post',
                success: function(data) {
                    // display image
                }
            });
        } else {
            $("#" + html_div).html('');
            alert('We only accept JPG, JPEG, PNG, GIF and BMP files');
        }

    }
});

function check_multifile_logo(file) {
    var extension = file.substr((file.lastIndexOf('.') + 1))
    if (extension === 'jpg' || extension === 'jpeg' || extension === 'gif' || extension === 'png' || extension === 'bmp') {
        return true;
    } else {
        return false;
    }
}

这里的#multi_file_upload是图片上传字段的ID。


谢谢你,但是我需要一个Javascript代码,而不是PHP。

我只需要将不同尺寸的图像显示4倍,我只是遇到问题,src但是谢谢您。我要稍后再试。:D

您可以从ajax调用返回图像。在我的示例中,upload_contact_info.php。因此,您将在ajax响应中获得图像名称,然后您就需要创建动态图像。这就对了。
HB Kautil 2014年

这太荒谬了,但是我不知道如何使用您发布的代码。哈哈!但我会继续努力。

@HBKautil,其余代码在哪里?HTML部分在哪里?
黑色

0
<li class="list-group-item active"><h5>Feaured Image</h5></li>
            <li class="list-group-item">
                <div class="input-group mb-3">
                    <div class="custom-file ">
                        <input type="file"  class="custom-file-input" name="thumbnail" id="thumbnail">
                        <label class="custom-file-label" for="thumbnail">Choose file</label>
                    </div>
                </div>
                <div class="img-thumbnail  text-center">
                    <img src="@if(isset($product)) {{asset('storage/'.$product->thumbnail)}} @else {{asset('images/no-thumbnail.jpeg')}} @endif" id="imgthumbnail" class="img-fluid" alt="">
                </div>
            </li>
<script>
$(function(){
$('#thumbnail').on('change', function() {
    var file = $(this).get(0).files;
    var reader = new FileReader();
    reader.readAsDataURL(file[0]);
    reader.addEventListener("load", function(e) {
    var image = e.target.result;
$("#imgthumbnail").attr('src', image);
});
});
}
</script>

1
请添加解释说明为什么您的答案比现有答案更有用。另外,尝试避免一般情况下仅使用代码的答案。
gaganshera

0
<img id="output_image" height=50px width=50px\
<input type="file" accept="image/*" onchange="preview_image(event)">

<script type"text/javascript">
  function preview_image(event) {
    var reader = new FileReader();
    reader.onload = function(){
      var output = document.getElementById('output_image');
      output.src = reader.result;
    }
    reader.readAsDataURL(event.target.files[0]);
  }
</script>

7
请为您的答案添加解释,说明为什么以及如何使用此代码。仅代码答案不是很有用,并且可能导致对货物的崇拜编程
Max Vollmer
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.