HTML输入类型=文件,在提交表单之前获取图像

时间:2011-04-27 10:25:50

标签: javascript html forms file-io

我正在建立一个基本的社交网络,在注册时,用户上传了一个显示图像。 基本上我想在显示图像之前,就像在表单的同一页面上预览一样,只需在选择它之后和表单提交之前。

这可能吗?

7 个答案:

答案 0 :(得分:54)

以下是在上传图片之前预览图片的完整示例。

HTML:

<html>
<head>
<link class="jsbin" href="http://ajax.googleapis.com/ajax/libs/jqueryui/1/themes/base/jquery-ui.css" rel="stylesheet" type="text/css" />
<script class="jsbin" src="http://ajax.googleapis.com/ajax/libs/jquery/1/jquery.min.js"></script>
<script class="jsbin" src="http://ajax.googleapis.com/ajax/libs/jqueryui/1.8.0/jquery-ui.min.js"></script>
<meta charset=utf-8 />
<title>JS Bin</title>
<!--[if IE]>
<script src="http://goo.gl/r57ze"></script>
<![endif]-->
</head>
<body>
<input type='file' onchange="readURL(this);" />
<img id="blah" src="#" alt="your image" />
</body>
</html>

JavaScript:

function readURL(input) {
  if (input.files && input.files[0]) {
    var reader = new FileReader();
    reader.onload = function (e) {
      $('#blah')
        .attr('src', e.target.result)
        .width(150)
        .height(200);
    };
    reader.readAsDataURL(input.files[0]);
  }
}

答案 1 :(得分:19)

我找到了使用fileReader对象的simpler yet powerful tutorial。它只是创建一个img元素,并使用fileReader对象将其source属性指定为表单输入的值

function previewFile() {
  var preview = document.querySelector('img');
  var file    = document.querySelector('input[type=file]').files[0];
  var reader  = new FileReader();

  reader.onloadend = function () {
    preview.src = reader.result;
  }

  if (file) {
    reader.readAsDataURL(file);
  } else {
    preview.src = "";
  }
}
<input type="file" onchange="previewFile()"><br>
<img src="" height="200" alt="Image preview...">

答案 2 :(得分:16)

使用HTML 5可以非常轻松地完成此操作,请参阅此链接http://www.html5rocks.com/en/tutorials/file/dndfiles/

答案 3 :(得分:6)

漂亮的开源文件上传器

http://blueimp.github.com/jQuery-File-Upload/

答案 4 :(得分:5)

我觉得我们之前有过相关的讨论:How to upload preview image before upload through JavaScript

答案 5 :(得分:5)

&#13;
&#13;
function previewFile() {
  var preview = document.querySelector('img');
  var file    = document.querySelector('input[type=file]').files[0];
  var reader  = new FileReader();

  reader.onloadend = function () {
    preview.src = reader.result;
  }

  if (file) {
    reader.readAsDataURL(file);
  } else {
    preview.src = "";
  }
}
&#13;
<input type="file" onchange="previewFile()"><br>
<img src="" height="200" alt="Image preview...">
&#13;
&#13;
&#13;

答案 6 :(得分:3)

在从任何服务器提供图像之前,无法显示图像。因此您需要将图像上传到服务器以显示其预览。