6

In uno dei miei applicazione Web API Azure Web App, sto creando i file temporanei utilizzando questo codice in un metodo GetAzure Web App pulizia responsabilità

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 

La mia domanda è, in un ambiente gestito come questo (non in VM), ho bisogno di cancellare quei file temporanei da solo? Non dovrebbe Azure stesso per cancellare quei file temporanei?

risposta

7

Questi file vengono puliti solo al riavvio del sito.

Se il tuo sito è in esecuzione in modalità gratuita o condivisa, riceve solo 300 MB per i file temporanei, quindi potresti esaurire se non si pulisce.

Se il sito è in modalità di base o standard, c'è molto più spazio (circa 200 GB!). Quindi potresti probabilmente farla franca senza ripulire senza correre il limite. Alla fine, il tuo sito verrà riavviato (ad esempio durante l'aggiornamento della piattaforma), quindi le cose verranno ripulite.

Vedere this page per ulteriori dettagli su questo argomento.

+0

così, se a pianificare un 'nuovo inizio' ogni mattina, poi ho non è necessario preoccuparsi dei file temporanei. ho ragione @ David-ebbo? –

+0

Sì, dovrebbe essere sicuro. –

0

L'esempio seguente mostra come salvare il file temporaneo in azzurro, sia Path che Bolb.

Doc è qui: https://code.msdn.microsoft.com/How-to-store-temp-files-in-d33bbb10
Codice clicca qui: https://github.com/Azure-Samples/storage-blob-dotnet-store-temp-files/archive/master.zip

Sotto parte è la logica di nucleo di BOLB Codice:

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