6

を清掃AzureのWebアプリケーションの一時ファイルが、私はこのコードを使用して一時ファイルを作成してい私AzureのWebアプリケーションのWeb APIアプリケーションの一つでは責任

string path = Path.GetTempFileName(); 
    // do some writing on this file. then read 
    var fileStream = File.OpenRead(path); 
    // then returning this stream as a HttpResponseMessage response 

私の質問は、このような管理された環境で、あります(VMではなく)自分でこれらの一時ファイルを消去する必要がありますか? Azure自体がこれらの一時ファイルを消去するはずはありませんか?

答えて

7

これらのファイルは、サイトの再起動時にのみ消去されます。

サイトがフリーモードまたは共有モードで実行されている場合は、一時ファイル用に300MBしか得られないため、クリーンアップしないと使い果たします。

サイトが基本モードまたは標準モードの場合、かなりのスペース(約200GB!)があります。だから、あなたはおそらく限界に逃げずに掃除しないで逃げることができます。最終的にサイトが再起動され(プラットフォームのアップグレード中など)、状況が改善されます。

このトピックの詳細については、this pageを参照してください。

+0

ので、私は毎朝「再起動」をスケジュールした場合、その後、私は一時ファイルについて心配する必要はありません。私は@ David-ebboの権利ですか? –

+0

はい、安全です。 –

0

次のサンプルは、パスとボルブの両方のazureに一時ファイルを保存する方法を示しています。

ドクはここにある:https://code.msdn.microsoft.com/How-to-store-temp-files-in-d33bbb10
コードこちらをクリックしてください:一部の下https://github.com/Azure-Samples/storage-blob-dotnet-store-temp-files/archive/master.zip

はbolbコードのコアロジックです:

private long TotalLimitSizeOfTempFiles = 100 * 1024 * 1024; 

private async Task SaveTempFile(string fileName, long contentLenght, Stream inputStream) 
{ 
    try 
    { 
     await container.CreateIfNotExistsAsync(); 

     CloudBlockBlob tempFileBlob = container.GetBlockBlobReference(fileName); 

     tempFileBlob.DeleteIfExists(); 

     await CleanStorageIfReachLimit(contentLenght); 

     tempFileBlob.UploadFromStream(inputStream); 
    } 
    catch (Exception ex) 
    { 
     if (ex.InnerException != null) 
     { 
      throw ex.InnerException; 
     } 
     else 
     { 
      throw ex; 
     } 
    } 
} 

private async Task CleanStorageIfReachLimit(long newFileLength) 
{ 
    List<CloudBlob> blobs = container.ListBlobs() 
     .OfType<CloudBlob>() 
     .OrderBy(m => m.Properties.LastModified) 
     .ToList(); 

    long totalSize = blobs.Sum(m => m.Properties.Length); 

    long realLimetSize = TotalLimitSizeOfTempFiles - newFileLength; 

    foreach (CloudBlob item in blobs) 
    { 
     if (totalSize <= realLimetSize) 
     { 
      break; 
     } 

     await item.DeleteIfExistsAsync(); 
     totalSize -= item.Properties.Length; 
    } 
} 
関連する問題