2017-03-14 13 views
0

私たちのシステムは、数年間にわたって何百万ものファイルをアップロードするために使用されています。クライアントは、次のコードを使用してWindows Server 2008 R2のWEB APIに認証トークンとzipファイルを送信します。私たちのWindows 7デバイスでは、システムは素晴らしいです。 Windows 10のデバイスに移行しようとすると、受信したファイルにソースファイルとは異なる順序でデータブロックがあるという問題が突然発生しました。この問題は時間の半分に過ぎず、追跡が非常に困難です。勝利10ジップアップロードはデータブロックを並べ替えます

クライアントコード(.NET 4.5)

private static void UploadFile(string srcFile, string username, string password) 
{ 
    if (File.Exists(srcFile)) 
    { 
     ConnectionUtilities connUtil = new ConnectionUtilities(); 
     string authToken = connUtil.GetAuthToken(username, password); 
     using (HttpContent authContent = new StringContent(authToken)) 
     { 
      using (HttpContent fileStreamContent = new ByteArrayContent(File.ReadAllBytes(srcFile))) 
      { 
       FileInfo fi = new FileInfo(srcFile); 
       using (HttpClient client = new HttpClient()) 
       using (MultipartFormDataContent formData = new MultipartFormDataContent()) 
       { 
        client.DefaultRequestHeaders.ExpectContinue = false; 
        formData.Add(authContent, "auth"); 
        formData.Add(fileStreamContent, "data", fi.Name); 
        var response = client.PostAsync(ConfigItems.hostName + "UploadData", formData).Result; 
        if (response.IsSuccessStatusCode) 
        { 
         File.Delete(srcFile); 
        } 
       } 
      } 
     } 
    } 
} 

WEB APIコード(.NET 4.5.2)

public async Task<HttpResponseMessage> PostUploadData() 
{ 
    if (Request.Content.IsMimeMultipartContent()) 
    { 
     MultipartFormDataStreamProvider streamProvider = 
       MultipartFormDataStreamProvider(HttpContext.Current.Server.MapPath("~/app_data")); 
     await Request.Content.ReadAsMultipartAsync(streamProvider); 
     string auth = streamProvider.FormData["auth"]; 
     if (auth != null) 
     { 
      auth = HttpUtility.UrlDecode(auth); 
     } 
     if (Util.IsValidUsernameAndPassword(auth)) 
     { 
      string username = Util.GetUsername(auth); 
      foreach (var file in streamProvider.FileData) 
      { 
       DirectoryInfo di = new DirectoryInfo(ConfigurationManager.AppSettings["DataRoot"]); 
       di = di.CreateSubdirectory(username); 
       string contentFileName = file.Headers.ContentDisposition.FileName; 
       di = di.CreateSubdirectory("storage"); 
       FileInfo fi = new FileInfo(file.LocalFileName); 
       string destFileName = Path.Combine(di.FullName, contentFileName); 
       File.Move(fi.FullName, destFileName); 
      } 
      return new HttpResponseMessage(HttpStatusCode.OK); 
     } 
    } 
    return new HttpResponseMessage(HttpStatusCode.ServiceUnavailable); 
} 

問題は、当初、Windowsで開くことができないZIPファイルとして現れます。 16進数の比較を行うだけで、ファイルがすべてそこにあると判断されました。元のファイルと同じ順序ではありません。

データのブロックの並べ替えの原因は何ですか?

P.S.私はHttpClientが効果的に有効に使用されていないことを知っています。

答えて

0

私たちは、ウェブコンテンツフィルタソフトウェアが問題を引き起こしていると判断しました(やや科学的方法)。

関連する問題