【问题标题】:How to display image after selecting path in FileUpload controller without clicking如何在 FileUpload 控制器中选择路径后显示图像而不单击
【发布时间】:2013-12-17 15:04:45
【问题描述】:

最近我一直在用 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" />

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

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

【问题讨论】:

    标签: c# asp.net image file-upload


    【解决方案1】:

    File ApiHTML5 (Example: Using files from web applications) 的帮助下,您可以轻松完成此任务。将标记更改为使用 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>
    

    现在选择图像后,您可以看到如下预览:

    您可以使用 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.
    }
    

    【讨论】:

    • 哇!!非常感谢,这正是我想要的 +1
    • 知道为什么我会收到Uncaught SyntaxError: Failed to execute 'querySelector' on 'Document': '#&lt;%=Avatar.ClientID %&gt;' is not a valid selector. 错误吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-08-07
    • 2016-06-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-01-04
    相关资源
    最近更新 更多