6

Trong một trong những ứng dụng Azure Web App Web API của tôi, tôi đang tạo ra các file tạm sử dụng mã này trong một phương pháp NhậnAzure Web App tập tin Temp sạch trách nhiệm

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 

Câu hỏi của tôi là, trong một môi trường được quản lý như thế này (không phải trong VM), tôi có cần tự xóa các tệp tạm thời đó không? Azure có nên tự xóa các tệp tạm thời đó không?

Trả lời

7

Các tệp đó chỉ được làm sạch khi trang web của bạn được khởi động lại.

Nếu trang web của bạn đang chạy trong chế độ miễn phí hoặc chia sẻ, nó chỉ được 300MB cho các tập tin tạm thời, vì vậy bạn có thể chạy ra ngoài nếu bạn không dọn dẹp.

Nếu trang web của bạn đang ở chế độ cơ bản hoặc Standard, sau đó đáng kể là nhiều không gian hơn (khoảng 200GB!). Vì vậy, bạn có thể có thể nhận được đi với không làm sạch mà không cần chạy vào giới hạn. Cuối cùng, trang web của bạn sẽ được khởi động lại (ví dụ: trong khi nâng cấp nền tảng), vì vậy mọi thứ sẽ được dọn dẹp.

Xem this page đối với một số chi tiết bổ sung về chủ đề này.

+0

như vậy, nếu tôi sắp xếp một 'khởi động lại' mỗi buổi sáng, sau đó tôi không cần phải lo lắng về các tập tin tạm thời. Tôi có đúng @ David-ebbo không? –

+0

Có, điều đó sẽ an toàn. –

0

Tiếp theo mẫu chứng minh làm thế nào để lưu tập tin tạm thời trong xanh, cả con đường và Bolb.

Doc là ở đây: https://code.msdn.microsoft.com/How-to-store-temp-files-in-d33bbb10
Mã bấm vào đây: https://github.com/Azure-Samples/storage-blob-dotnet-store-temp-files/archive/master.zip

Dưới phần là logic cốt lõi của bolb mã:

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; 
    } 
} 
Các vấn đề liên quan