2012-04-25 39 views
2

我想從我的小提琴調試器上傳視頻文件.mov到遠程Web服務來測試服務,但存儲在磁盤上的文件出來是腐敗?有什麼建議麼?二進制上載WCF腐敗.mov文件

請求頭

Content-Type: multipart/form-data; boundary=-------------------------acebdf13572468 
User-Agent: Fiddler 
Host: localhost:2487 
Content-Length: 2113228 

請求體

---------------------------acebdf13572468 
Content-Disposition: form-data; name="IMG_0888.MOV"; filename="IMG_0888.MOV" 
Content-Type: video/quicktime 

<@INCLUDE *C:\Users\Amrit\Desktop\IMG_0888.MOV*@> 
---------------------------acebdf13572468-- 

C#代碼

 FileStream fs = null; 
      string UniqueId = this.GenerateUID(); 
      _fileDirectory = System.IO.Path.Combine(Constants._VideosDirectory,author_id); 
      if (!Directory.Exists(_fileDirectory)) 
      { 
       Directory.CreateDirectory(_fileDirectory); 
      } 
      string file = Path.Combine(_fileDirectory, "test.mov"); 
    //  string filePath = Path.Combine(uploadFolder, request.FileName); 

      try 
      { 
       using (FileStream targetStream = new FileStream(file, FileMode.Create, 
           FileAccess.Write, FileShare.None)) 
       { 
        //read from the input stream in 65000 byte chunks 

        const int bufferLen = 65000; 
        byte[] buffer = new byte[bufferLen]; 
        int count = 0; 
        while ((count = request.Read(buffer, 0, bufferLen)) > 0) 
        { 
         // save to output stream 
         targetStream.Write(buffer, 0, count); 
        } 
        targetStream.Close(); 
        return "done"; 
        //sourceStream.Close(); 
       } 
      } 


      catch (Exception) 
      { 
       return "fail"; 
      } 
      finally 
      { 

      } 
+3

很可能是因爲您將整個請求保存到磁盤 - 您需要查看請求並獲取實際的文件內容。 – 2012-04-25 15:29:34

+0

謝謝@AndrasZoltan – Amrit 2012-04-26 15:34:48

回答

2

由於安德拉斯所指出的,你可能會節省整個請求到磁盤,而不僅僅是內容,但更有可能的是,您將unicode字節順序標記(BOM)保存到文件的起始位置(即i由一些.NET流自動完成)。

您應該做的第一件事是檢查保存的文件長度與原始文件的長度,新文件可能會長度增加3個字節,這表明BOM已被添加。

要確認,請在十六進制編輯器中打開這兩個文件,並查看內容的外觀,然後將其與您的源文件進行比較。比較兩個十六進制文件時,應該只查看前幾個字符和最後幾個字符(如果最後幾個字符不同,則意味着您的數據流沒有完成並且您的文件被截斷,如果第一個字符不同,則表示您有BOM附)。

您可能需要使用的是File.WriteBytes而不是FileStream這會阻止包含BOM。

+0

感謝@Seph,爲我工作,我HTTP解析流,並獲得FileContents作爲字節和使用File.WriteBytes – Amrit 2012-04-26 15:36:32

+0

你會如何從流中刪除標題?我遇到了這個問題,我上傳了一個.zip文件,並保存了帶有http頭文件的文件。 – guiomie 2013-02-06 15:48:22