最近我一直在使用 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>
现在选择图像后,您可以看到如下所示的预览:
您可以使用 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/