AjaxFileUpload重新加载页面上的上传仅为图像文件



我一直在努力调试一个断断续续的问题,我一直在与AJAXFileUpload。我正在将我们的代码从另一个上传器移开,并且已经将其工作到几个页面中。我已经意识到,上传程序在代码中完成UploadComplete代码后重新加载页面,仅用于图像。我可以上传。pdf,。docx绝对没有问题,但一旦我尝试。png,。jpeg,。gif等,页面在上传后立即重新加载。

我找不到任何表明这两种类型的文件之间的行为应该不同的东西,我假设我遗漏了一些东西。

这是我的上传控件:
<ajax:AjaxFileUpload AutoStartUpload="true" OnClientUploadCompleteAll="() => $('#btnSaveThumbnails').toggle()" ClientIDMode="Static" style="max-width:800px;display:none" runat="server" ID="thumbUploader" />
下面是UploadComplete函数的代码:
If Not System.IO.Directory.Exists(tempFilePath) Then
System.IO.Directory.CreateDirectory(tempFilePath)
End If
sender.SaveAs(tempFilePath & e.FileName)
Session("docUploaderFiles") = If(Session("docUploaderFiles"), New List(Of String))
CType(Session("docUploaderFiles"), List(Of String)).Add(e.FileName)

就像我提到的,在我的经验中,这些工作完全符合非图像文件类型的预期。

更新:我已经将其缩小到由代码隐藏中的. savea调用引起的。删除这一行不会导致页面重新加载。

更新:我发现这个问题是特定于我的机器。上传程序可以在其他本地环境中工作,也可以在我们的生产应用程序中工作。可能与我的IIS有关。

我不明白为什么这不行。

然而,我经常发现,如果你没有指定和连接客户端事件,那么上传程序可能会对你产生影响。

那么,在你的测试中试试这个:

<ajaxToolkit:AjaxFileUpload ID="AjaxFileUpload1" runat="server" 
OnClientUploadComplete="MyComplete" 
OnClientUploadCompleteAll="MyCompleteAll" 
OnClientUploadStart="MyStart" AllowedFileTypes="txt,zip,png,jpeg"
OnClientUploadError="MyError" ChunkSize="16384" />
</div>
<br />
<br />
</div>
<script>
function MyStart() {
}
function MyComplete() {
}
function MyCompleteAll() {
}
function MyError(e) {
}

</script>

注意我是如何添加客户端事件的。我发现在某些情况下,没有客户端事件,那么问题就出现了,所以我在4个空白的客户端事件。

即使你不使用客户端事件,试着按照上面的方法把它们放进去。所以,我加入了4个客户端事件-在这些存根中没有任何代码。

这个测试的服务器端代码是这样的:

Protected Sub AjaxFileUpload1_UploadCompleteAll(sender As Object, e As AjaxControlToolkit.AjaxFileUploadCompleteAllEventArgs) Handles AjaxFileUpload1.UploadCompleteAll
Debug.Print("all done")
End Sub
Protected Sub AjaxFileUpload1_UploadStart(sender As Object, e As AjaxControlToolkit.AjaxFileUploadStartEventArgs) Handles AjaxFileUpload1.UploadStart
Debug.Print("start upload")
End Sub
Protected Sub AjaxFileUpload1_UploadComplete(sender As Object, e As AjaxControlToolkit.AjaxFileUploadEventArgs) Handles AjaxFileUpload1.UploadComplete
Debug.Print("file done")
Debug.Print(e.FileName)
End Sub
Protected Sub AsyncFileUpload1_UploadedFileError(sender As Object, e As AjaxControlToolkit.AsyncFileUploadEventArgs)
Debug.Print(e.StatusMessage)

End Sub

我也会检查+清除文件名中的非ASCII字符。我看到过一些有趣的文件——它们会弹出一个错误。

所以,我这样做:

Dim strCleanFile As String = TrimNonAscii(e.FileName)

Public Function TrimNonAscii(ByVal value As String) As String
Dim pattern As String = "[^ -~]+"
Dim reg_exp As Regex = New Regex(pattern)
Return reg_exp.Replace(value, "")
End Function

所以我去掉了空格,也去掉了其他有趣的值。(从Mac或其他设备,他们实际上允许在文件名中使用非合法的windows字符,但windows不允许。

最新更新