我正在实现一个模块,用于将文件从客户端机器上传到服务器.在服务器端,我正在使用WCF Soap服务.
为了以块的形式上传文件,我已经从Microsoft http://msdn.microsoft.com/en-us/library/aa717050.aspx实现了这个示例.我已经能够在一个简单的场景中使它工作,所以它确实以块的形式上传文件.此分块模块使用WSDualHttpBinding.
我需要实现一个功能来重新上传文件,以防上传过程因上载特定文件而出于任何原因(用户选择,机器关闭等)而停止.
在我的WCF服务中,我有一个方法来处理服务器端的文件写入:
public void UploadFile(RemoteFileInfo request)
{
FileInfo fi = new FileInfo(Path.Combine(Utils.StorePath(), request.FileName));
if (!fi.Directory.Exists)
{
fi.Directory.Create();
}
FileStream file = new FileStream(fi.FullName, FileMode.Create, FileAccess.Write);
int count;
byte[] buffer = new byte[4096];
while ((count = request.FileByteStream.Read(buffer, 0, buffer.Length)) > 0)
{
file.Write(buffer, 0, count);
file.Flush();
}
request.FileByteStream.Close();
file.Position = 0;
file.Close();
if (request.FileByteStream != null)
{
request.FileByteStream.Close();
request.FileByteStream.Dispose();
}
}
Run Code Online (Sandbox Code Playgroud)
当函数request.FileByteStream.Read(buffer,0,buffer.Length)被消耗时,分块模块正在发送块.
文件流初始化后,文件被锁定(这是初始化文件流进行写入时的正常行为),但我遇到的问题是我在执行发送/接收过程时停止上传过程,然后是频道分块模块使用的文件未被取消,因此文件保持锁定,因为WCF服务仍在等待发送更多数据,直到发送超时到期(超时为1小时,因为我需要上传文件+ 2.5GB).在下一次上传时,如果我尝试上传同一个文件,我会在WCF服务上遇到异常,因为无法再为同一个文件初始化文件流.
我想知道是否有办法避免/删除文件锁,所以在下次运行时我可以重新上传同一个文件,即使前一个文件流已经锁定了文件.
任何帮助都会很感激,谢谢.
我有一个aspx页面,由3个用户控件(ascx)组成.我有一个更新面板包装3个用户控件,如下所示:
<asp:UpdatePanel ID="UpdatePanelWrapper" runat="server">
<ContentTemplate>
<uc1:UserControl1 ID="UserControl1" runat="server" />
<uc2:UserControl2 ID="UserControl2" runat="server"/>
<uc2:UserControl3 ID="UserControl3" runat="server"/>
</ContentTemplate>
</asp:UpdatePanel>
Run Code Online (Sandbox Code Playgroud)
我通过单独显示每个用户控件,因此当显示"UserControl1"时,隐藏其他2个用户控件.
在"UserControl1"里面我有一些asp控件和一些javascript函数.我的问题是,当刷新"UpdatePanelWrapper"时,永远不会调用这些javascript函数.
我已经尝试过这个解决方案http://blog.dreamlabsolutions.com/post/2009/02/24/jQuery-document-ready-and-ASP-NET-Ajax-asynchronous-postback.aspx,通过添加javascript调用内部"UserControl1"虽然不起作用.只有当我在aspx页面中添加javascript调用但不在"UserControl1"内部时,我才能使用它.
任何帮助将不胜感激,谢谢.
我在我的aspx.net页面中使用AsyncFileUpload控件.此控件在更新面板中运行.
我可以异步将文件成功上传到服务器.
我的问题是我无法在每个文件上传后刷新整个页面,因此我需要弄清楚如何清理上次上传的文件,因此当用户选择要上传的新文件时,旧文件不会出现在控件和控件中不会在ViewState中保留其上次上载.
我试过这个http://www.aspsnippets.com/Articles/Clear-contents-of-AsyncFileUpload-Control-after-upload-and-page-revisit.aspx但它只清除html,当我做服务器时异步回发,AsyncFileUpload控件仍然上传了最后一个文件.
有没有办法在服务器端进行清理?也许任何与视图状态相关的东西
任何帮助将不胜感激,谢谢.