2014-07-07 33 views
6

Şu anda farklı kullanıcıların dosya yükleyebildikleri, yükledikleri dosyaları dönüştürebildikleri ve dönüştürülmüş dosyaları indirebildikleri küçük bir web arayüzü üzerinde çalışıyorum. Dönüşümün detayları benim sorumum için önemli değil.Flask- İndirildikten sonra yükleme siliniyor

Şu anda yüklenen dosyaları yönetmek için flask yüklemelerini kullanıyorum ve bunları dosya sisteminde saklıyorum. Bir kullanıcı bir dosyayı yükleyip dönüştürdüğünde, dosyayı silmek için her türlü güzel düğme vardır, böylece yükleme klasörü dolmaz.

Bunun ideal olduğunu düşünmüyorum. Gerçekten istediğim, dosyaların indirildikten hemen sonra silinmesi. Oturum bittiğinde silinmekte olan dosyalar için yerleşirdim.

Bunu nasıl yapacağımı anlamaya çalışırken biraz zaman geçirdim, ancak henüz başaramadım. Bu yaygın olmayan bir problem gibi görünmüyor, bu yüzden eksik olduğum bir çözüm bulunması gerektiğini düşünüyorum. Herkesin bir çözümü var mı?

cevap

11

Flask bu kullanım şeklini işe yarayabilir bir after_this_request dekoratör vardır:

@app.route('/files/<filename>/download') 
def download_file(filename): 
    file_path = derive_filepath_from_filename(filename) 
    file_handle = open(file_path, 'r') 
    @after_this_request 
    def remove_file(response): 
     try: 
      os.remove(file_path) 
      file_handle.close() 
     except Exception as error: 
      app.logger.error("Error removing or closing downloaded file handle", error) 
     return response 
    return send_file(file_handle) 

Sorun yine bir açık dosya işaretçisi varsa dosyayı olanak sağlayan bu irade only work well on Linux (hatta silindikten sonra okunacak olmasıdır o).

+0

ooo, 'after_this_request 'işleyicisi hakkında bilmiyordum – corvid

+0

Yardımlarınız için teşekkürler! Çalışıyor gibi görünüyor ve sonuçtan çok memnunum. – seaturtlecook

+0

Tek bir soru: Tüm bunları yaptıktan sonra sayfayı yenilemenin kolay bir yolunu biliyor musunuz? – seaturtlecook

İlgili konular