关于文件上传:HTML – 选择文件名后显示图像

HTML - Display image after selecting filename

本问题已经有最佳答案,请猛点这里访问。

Possible Duplicate:
Preview an image before it is uploaded

我有一个允许我的表格

1
<input type="file" name="filename" accept="image/gif, image/jpeg, image/png">

浏览并选择一个文件。

我想要做的是在选择图像后立即显示该图像。
这是在表单上的"提交"按钮被按下之前,因此图像几乎肯定存在于客户端。 可以这样做吗?


干得好:

HTML

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
<!DOCTYPE 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 class="jsbin" src="http://ajax.googleapis.com/ajax/libs/jqueryui/1.8.0/jquery-ui.min.js">
<meta charset=utf-8 />
JS Bin
<!--[if IE]>
  <script src="http://html5shiv.googlecode.com/svn/trunk/html5.js">
<![endif]-->
<style>
  article, aside, figure, footer, header, hgroup,
  menu, nav, section { display: block; }
</style>
</head>
<body>
  <input type='file' onchange="readURL(this);" />
    <img id="blah" src="#" alt="your image" />
</body>
</html>

脚本:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
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
2
3
4
5
6
7
8
9
10
11
12
13
14
15
$("input").change(function(e) {

    for (var i = 0; i < e.originalEvent.srcElement.files.length; i++) {

        var file = e.originalEvent.srcElement.files[i];

        var img = document.createElement("img");
        var reader = new FileReader();
        reader.onloadend = function() {
             img.src = reader.result;
        }
        reader.readAsDataURL(file);
        $("input").after(img);
    }
});

演示:
http://jsfiddle.net/ugPDx/


这可以使用HTML5完成,但只能在支持它的浏览器中使用。 这是一个例子。

请记住,对于不支持此功能的浏览器,您需要一种替代方法。 我在这个插件上取得了很大的成功,这需要你手中的很多工作。