我想在我的aspx页面上的主机上传一个图像。但我可以用ajax吗?(我的意思是,在上传期间没有回发)。
我看看gmail文件上传器,经典模式使用亚麻(这是个坏主意)但我能理解现代模式吗?!!
根据我在谷歌的搜索,出于安全原因可能无法发生
有些人帮我解决了这个问题。“使用ajax上传文件”
答案 0 :(得分:1)
你可以这样做..使用ajax .....
第1步:首先在单独的页面中创建一个上传表单,如下所示(myIframe.html)
<form method="POST" target="_self" enctype="multipart/form-data" action="main.aspx">
<input type="file" name="fileUpload" />
<input type="submit" value="UPLOAD" />
</form>
第2步:在主页面(main.aspx)中,您必须放置一个iframe并将该页面加载到其中。你也可以使边框不可见,所以它看起来不像是iframe。
<iframe name="iUploadFrame" src="myIframe.html" frameborder="0" onload="iUploadFrameLoad();"></iframe>
请注意,这是指定javascript的onload事件处理函数。那个人会在下面解释。
第3步:为了测试,在main.aspx和UpdatePanel中使用按钮和标签进行测试:
<asp:UpdatePanel ID="pnlMain" runat="server">
<ContentTemplate>
<asp:Label id="lblMessage" runat="server" />
<asp:Button id="btnUploadComplted" runat="server" style="visibility:hidden;" />
</ContentTemplate>
<Triggers>
<asp:AsyncPostBackTrigger ControlID="btnUploadCompleted" EventName="Click" />
</Triggers>
</asp:UpdatePanel>
请注意,如果您希望可以使用CSS样式隐藏按钮,但不能设置visible =“False”属性。这是因为如果你想在输出文档中使用按钮html并希望通过该按钮触发ajax回调。
第4步:您可以在代码隐藏中定义按钮的点击事件处理程序,如下所示:
protected void btnUploadCompleted_Click(object s, EventArgs e) {
lblMessage.Text = "UPLOAD PROCESS COMPLETED SUCCESSFULLY";
}
STEP:5 现在,要保存文件,您可以在代码隐藏中编写代码,如下所示:
protected void Page_Load(object s, EventArgs e) {
if ((Request.Files.Count == 1)) {
// process to save file
Response.Write("SUCCESS");
Response.End();
}
}
STEP:6 现在我们需要做的就是创建javascript函数,将流程集成到ajax实现中。该事件将在上传过程完成时触发,然后它将触发btnUploadCompleted的click事件,该事件负责进行ajax调用。
<script type="text/javascript">
function iUploadFrameLoad() {
if (window.iUploadFrame.document.body.innerHTML == "SUCCESS") {
document.forms[0].elements[btnUploadCompleted].click();
}
}
</script>
我希望它会帮助你...