使用jQuery浏览文件系统并在span中显示图像

使用jQuery浏览文件系统并在span中显示图像,jquery,html,css,asp.net-mvc-3,Jquery,Html,Css,Asp.net Mvc 3,我正在使用razor视图开发ASP.NET MVC3应用程序。我正在尝试创建一个带有删除/上传选项的简单自定义图像库。所有的逻辑都在@HTML.BeginForm中,因此只有在提交整个表单时,数据才会提交到服务器,在此之前,我希望用户能够添加/删除图像,而无需调用服务器。事实上,用户将看到Delete和Upload链接,但在提交整个表单之前,这两个链接都不会对我的后端逻辑产生任何影响 这就是为什么我想让用户浏览文件系统并添加/删除不同的图像,但当他选择图像时,我想在我的span标记中显示它,仅此

我正在使用razor视图开发ASP.NET MVC3应用程序。我正在尝试创建一个带有删除/上传选项的简单自定义图像库。所有的逻辑都在
@HTML.BeginForm
中,因此只有在提交整个表单时,数据才会提交到服务器,在此之前,我希望用户能够添加/删除图像,而无需调用服务器。事实上,用户将看到
Delete
Upload
链接,但在提交整个表单之前,这两个链接都不会对我的后端逻辑产生任何影响

这就是为什么我想让用户浏览文件系统并添加/删除不同的图像,但当他选择图像时,我想在我的
span
标记中显示它,仅此而已

我可以附加到表单的图像数量有限,因此对于上载图像,我有以下几点:

@for (var i = ViewBag.PictureCount; i < Model[0].MCS_Documents.MaxPicCount; i++)
    { 
        <span class="document-image-frame">
        <a href="#" class="upload-document-image">Upload Image</a>
        </span>
    }

当用户单击“上载图像”时,我想打开一个文件对话框窗口,当用户选择一个图像时,我想显示它,但不与服务器进行交互。

只有在客户端浏览器支持的情况下,这才可以在不与服务器交互的情况下实现。因此,如文档所示,您可以从向视图中添加文件输入字段开始:

@for (var i = ViewBag.PictureCount; i < Model[0].MCS_Documents.MaxPicCount; i++)
{ 
    <span class="document-image-frame">
        <a href="#" class="upload-document-image">Upload Image</a>
        <input type="file" accept="image/*" style="display:none" onchange="handleFiles(this)" />
    </span>
}
(var i=ViewBag.PictureCount;i 然后我们可以连接javascript:

$(function() {
    $('.upload-document-image').click(function() {
        $(this).next('input[type="file"]').trigger('click');
        return false;
    });
});

function handleFiles(fileInput) {
    var files = fileInput.files;
    for (var i = 0; i < files.length; i++) {
        var file = files[i];
        var imageType = /image.*/;

        if (!file.type.match(imageType)) {
            continue;
        }

        var img = document.createElement("img");
        img.classList.add("obj");
        img.file = file;
        $(fileInput).after(img);

        var reader = new FileReader();
        reader.onload = (function(aImg) { 
            return function(e) { 
                aImg.src = e.target.result; 
            }; 
        })(img);
        reader.readAsDataURL(file);
    }    
}
$(函数(){
$('.upload document image')。单击(函数(){
$(this).next('input[type=“file”]”)。trigger('click');
返回false;
});
});
函数句柄文件(文件输入){
var files=fileInput.files;
对于(var i=0;i
这是一个例子


如果客户端浏览器不支持HTML 5文件API,则您别无选择,只能将图像上载到服务器,并向该点添加动态生成的
标记,以便显示预览。

只有在客户端浏览器支持HTML 5文件API的情况下,才可以在不与服务器交互的情况下实现这一点。因此,如文档所示,您可以从向视图中添加文件输入字段开始:

@for (var i = ViewBag.PictureCount; i < Model[0].MCS_Documents.MaxPicCount; i++)
{ 
    <span class="document-image-frame">
        <a href="#" class="upload-document-image">Upload Image</a>
        <input type="file" accept="image/*" style="display:none" onchange="handleFiles(this)" />
    </span>
}
(var i=ViewBag.PictureCount;i 然后我们可以连接javascript:

$(function() {
    $('.upload-document-image').click(function() {
        $(this).next('input[type="file"]').trigger('click');
        return false;
    });
});

function handleFiles(fileInput) {
    var files = fileInput.files;
    for (var i = 0; i < files.length; i++) {
        var file = files[i];
        var imageType = /image.*/;

        if (!file.type.match(imageType)) {
            continue;
        }

        var img = document.createElement("img");
        img.classList.add("obj");
        img.file = file;
        $(fileInput).after(img);

        var reader = new FileReader();
        reader.onload = (function(aImg) { 
            return function(e) { 
                aImg.src = e.target.result; 
            }; 
        })(img);
        reader.readAsDataURL(file);
    }    
}
$(函数(){
$('.upload document image')。单击(函数(){
$(this).next('input[type=“file”]”)。trigger('click');
返回false;
});
});
函数句柄文件(文件输入){
var files=fileInput.files;
对于(var i=0;i
这是一个例子


如果客户端浏览器不支持HTML 5文件API,则您别无选择,只能将图像上载到服务器,并向该点添加动态生成的
标记,以便显示预览。

您可以从文件中获取base64编码的内容,并将其分配给img.src。但您需要使用Html5文件api,因此旧浏览器不支持它。您可以从文件中获取base64编码的内容并将其分配给img.src。但是您需要使用Html5文件api,因此旧浏览器不支持它。谢谢。目标浏览器是9,我会尝试你的建议,但我很确定它会起作用。不,它不会起作用。IE9不支持HTML5文件API。所以不要浪费你的时间,谢谢。目标浏览器是9,我会尝试你的建议,但我很确定它会起作用。不,它不会起作用。IE9不支持HTML5文件API。所以不要浪费你的时间。