2013-03-19 24 views
2

我試圖設置Valums文件上傳器(https://github.com/valums/file-uploader),在VB中使用ASP.NET。該文件目前正在上傳並存儲到我想要的位置,並且似乎可以正常工作,但似乎Firefox和Chrome(我假設使用Safari)會在正在上傳的實際CSV文件中追加一些附加文本。Valums上傳器額外的請求有效負載添加到文件

例如,這是我在通過Firefox中上傳文件中看到:

-----------------------------31203180683076 
Content-Disposition: form-data; name="qqfile"; filename="test.csv" 
Content-Type: application/vnd.ms-excel 

/* ACTUAL CONTENTS OF FILE HERE */ 

-----------------------------31203180683076-- 

同樣,鉻:

------WebKitFormBoundarytB00bSQcafSOAnmq 
Content-Disposition: form-data; name="qqfile"; filename="test.csv" 
Content-Type: application/vnd.ms-excel 

/* ACTUAL CONTENTS OF FILE HERE */ 

------WebKitFormBoundarytB00bSQcafSOAnmq-- 

如果我在Chrome瀏覽網絡面板我清楚地看到上面發佈的內容是在請求有效內容中發送的,但是我想要刪除它,或者在寫入文件時在服務器上完全忽略它。當我向上傳者添加paramsInBody: false時,我以爲自己找到了解決方案,它確實消除了一些混亂,但並非全部。

下面是在客戶端的相關代碼:

function createUploader() { 
    var uploader = new qq.FineUploader({ 
     element: document.getElementById('bootstrapped-fine-uploader'), 
     request: { 
      paramsInBody: false, 
      endpoint: 'Uploader.ashx' 
     }, 
     validation: { 
      allowedExtensions: ['csv', 'txt'] 
     }, 
     text: { 
      uploadButton: '<div><i class="icon-upload-alt icon-white"></i> Browse for files...</div>' 
     }, 
     template: '<div class="span12"><div class="qq-uploader">' + 
        '<pre class="qq-upload-drop-area span12"><span>{dragZoneText}</span></pre>' + 
        '<div class="qq-upload-button btn btn-success" style="width: auto;">{uploadButtonText}</div>' + 
        '<span class="qq-drop-processing"><span class="qq-drop-processing-spinner"></span></span>' + 
        '<ul class="qq-upload-list" style="margin: 0; list-style-type: none; margin-top: 20px;"></ul>' + 
       '</div></div>', 
     classes: { 
      success: 'alert alert-success', 
      fail: 'alert alert-error' 
     } 
    }); 
} 

而且這裏是有關服務器端處理程序:

Public Sub ProcessRequest(ByVal context As HttpContext) Implements IHttpHandler.ProcessRequest 
    On Error GoTo upload_error 

    Dim Request = context.Request 
    Dim strm As Stream = Request.InputStream 
    Dim br As BinaryReader = New BinaryReader(strm) 
    Dim fileContents() As Byte = {} 
    Const ChunkSize As Integer = 1024 * 1024 

    ' We need to hand IE a little bit differently... 
    If Request.Browser.Browser = "IE" Then 
     Dim myfiles As System.Web.HttpFileCollection = System.Web.HttpContext.Current.Request.Files 
     Dim postedFile As System.Web.HttpPostedFile = myfiles(0) 
     If Not postedFile.FileName.Equals("") Then 
      Dim fn As String = System.IO.Path.GetFileName(postedFile.FileName) 
      br = New BinaryReader(postedFile.InputStream) 
     End If 
    End If 

    ' Now have the binary reader on the IE file input Stream. Back to normal... 
    Do While br.BaseStream.Position < br.BaseStream.Length - 1 
     Dim b(ChunkSize - 1) As Byte 
     Dim ReadLen As Integer = br.Read(b, 0, ChunkSize) 
     Dim dummy() As Byte = fileContents.Concat(b).ToArray() 
     fileContents = dummy 
     dummy = Nothing 
    Loop 

    ' Or write it to the filesystem: 
    Dim writeStream As FileStream = New FileStream("C:\TEMP\" & System.Guid.NewGuid.ToString() & ".csv", FileMode.Create) 
    Dim bw As New BinaryWriter(writeStream) 
    bw.Write(fileContents) 
    bw.Close() 

    ' it all worked ok so send back SUCCESS is true! 
    context.Response.Write("{""success"":true}") 
    Exit Sub 

upload_error: 
    context.Response.Write("{""error"":""An Error Occured""}") 
End Sub 

爲什麼它會以這種方式工作任何想法?非常感謝。

回答

0

我能夠通過刪除VB代碼中的瀏覽器檢查來解決問題。而不是檢查IE瀏覽器,我只是讓它運行所有瀏覽器。

在運行調試時,我注意到一些東西被拉出來,我想使用該條件內的代碼將其拉出,所以我嘗試使用Chrome運行它,並且運行良好。

該代碼現在看起來像這樣的VB。我所要做的只是註釋掉條件並保持內部完整:

'Removed the If conditional and it worked. 
'If Request.Browser.Browser = "IE" Then 
    Dim myfiles As System.Web.HttpFileCollection = System.Web.HttpContext.Current.Request.Files 
    Dim postedFile As System.Web.HttpPostedFile = myfiles(0) 
    If Not postedFile.FileName.Equals("") Then 
     Dim fn As String = System.IO.Path.GetFileName(postedFile.FileName) 
     br = New BinaryReader(postedFile.InputStream) 
    End If 
'End If 
相關問題