6

W jednej z moich aplikacji Azure Web App Web API, tworzę pliki tymczasowe za pomocą tego kodu w metodzie GetAzure Web App Temp plik czyszczenia odpowiedzialność

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 

moje pytanie, w środowisku zarządzanym jak ta (nie w VM), Czy muszę samodzielnie wyczyścić te pliki tymczasowe? Czy sama usługa Azure nie powinna usuwać tych plików tymczasowych?

Odpowiedz

7

Pliki te są usuwane dopiero po ponownym uruchomieniu witryny.

Jeśli Twoja witryna działa w trybie darmowym lub współdzielonym, dostaje tylko 300 MB na pliki tymczasowe, więc możesz się uruchomić, jeśli nie posprzątasz.

Jeśli Twoja strona jest w trybie podstawowym lub standardowym, oznacza to znacznie więcej miejsca (około 200 GB!). Możesz więc prawdopodobnie uniknąć czyszczenia bez przekraczania limitu. W końcu Twoja strona zostanie ponownie uruchomiona (np. Podczas aktualizacji platformy), więc wszystko zostanie oczyszczone.

Aby uzyskać dodatkowe informacje na ten temat, zobacz stronę this page.

+0

więc, jeśli zaplanować 'restart' codziennie rano, a potem nie musisz się martwić o pliki tymczasowe. mam rację @ David-ebbo? –

+0

Tak, to powinno być bezpieczne. –

0

Poniższa próbka pokazuje, jak zapisać plik tymczasowy w kolorze błękitnym, zarówno ścieżkę, jak i Bolb.

Doc jest tutaj: https://code.msdn.microsoft.com/How-to-store-temp-files-in-d33bbb10
kod kliknij tutaj: https://github.com/Azure-Samples/storage-blob-dotnet-store-temp-files/archive/master.zip

mocy części jest logika rdzeń bolb kodu:

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; 
    } 
}