c# - 如何在不单击的情况下在 FileUpload Controller 中选择路径后显示图像

标签 c# asp.net image file-upload

最近我一直在使用 ASP.NET (c#) 开发 Web 表单应用程序: 我有一个图像控件:

<asp:Image ID="Avatar" runat="server" Height="225px" ImageUrl="~/Images/NoUser.jpg" Width="225px" />

还有FileUpload & Button控件

<asp:FileUpload ID="avatarUpload" runat="server" />
<asp:Button ID="btnUpload" runat="server" Text="Upload" OnClick="Upload" />

当用户点击按钮时,“上传”代码被执行(图像被发送到数据库)。问题是我喜欢在用户单击“绝望”按钮之前显示用户在头像图像 Controller 中选择的图像。

是否可以自动执行此操作?

最佳答案

借助 HTML5 (Example: Using files from web applications) 的 File Api,您可以轻松完成此操作。更改标记以使用 input type="file" 而不是 asp:FileUpload 并添加 ID,添加标签 runat="server" 来制作它可以从服务器访问。您的标记应如下所示:

<input ID="avatarUpload" type="file" name="file" onchange="previewFile()"  runat="server" />
<%--<asp:FileUpload ID="avatarUpload" runat="server" />--%>
<asp:Button ID="btnUpload" runat="server" Text="Upload" OnClick="Upload" />
<asp:Image ID="Avatar" runat="server" Height="225px" ImageUrl="~/Images/NoUser.jpg" Width="225px" />

现在在文档的头部添加一个javascript函数previewFile:

<head runat="server">
    <title></title>
    <script type="text/javascript">
        function previewFile() {
            var preview = document.querySelector('#<%=Avatar.ClientID %>');
            var file = document.querySelector('#<%=avatarUpload.ClientID %>').files[0];
            var reader = new FileReader();

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

            if (file) {
                reader.readAsDataURL(file);
            } else {
                preview.src = "";
            }
        }
    </script>
</head>

现在选择图像后,您可以看到如下所示的预览: enter image description here

您可以使用 css 将其调整为缩略图。 单击上传按钮后,您可以在代码中找到发布的文件:

protected void Upload(object sender, EventArgs e)
{
    int contentLength = avatarUpload.PostedFile.ContentLength;//You may need it for validation
    string contentType = avatarUpload.PostedFile.ContentType;//You may need it for validation
    string fileName = avatarUpload.PostedFile.FileName;
    avatarUpload.PostedFile.SaveAs(@"c:\test.tmp");//Or code to save in the DataBase.
}

关于c# - 如何在不单击的情况下在 FileUpload Controller 中选择路径后显示图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20319270/

相关文章:

c# - .NET 代码契约(Contract) : can it get more basic than this?

asp.net - 设计决策

javascript - Safari 浏览器上的强制“另存为”对话框

c# - 如何优雅地检查 Gravatar 或第三方网站是否正常运行?

html - 父div的悬停属性不影响子图像?

c# - 在运行时获取对象的成员

c# - 如何从字符串中删除非数字但在 C# 中保留小数

c# - 对于不是从 0 开始的缓冲区,有没有更轻松的 GetBytes 方法?

CSS - 图像和页脚问题

android - 如何使用SimpleAdapter在ListActivity客户项中显示来自网络的图片?