2010-12-22 59 views
1

我在將請求作爲附件發送到django時遇到了問題。我的應用程序將一些數據寫入文件並將其壓縮。但是,當我返回附件響應時,瀏覽器會下載它,但zip文件已損壞。 (原來的壓縮包含我的文件,並沒有給出任何錯誤。)Django,關於壓縮文件響應的問題

我的代碼是在這裏:

 file_path = "/root/Programs/media/statics/schedules/" 
     zip_file_name = file_path + "test.zip" 
     zip_file = zipfile.ZipFile(zip_file_name, "w") 
     for i in range(len(planner_list)): 
       file_name = file_path + str(planner_list[i][0].start_date) 
       render_to_file('deneme.html',file_name ,{'schedule':schedule}) 
       zip_file.write(file_name, os.path.basename(file_name),zipfile.ZIP_DEFLATED) 
       os.remove(file_name) 
     zip_file.close() 

     response = HttpResponse(file_path , content_type='application/zip') 
     response['Content-Disposition'] = 'attachment; filename=test.zip' 
     return response 
+0

類似的問題在這裏:http://stackoverflow.com/questions/67454/serving-dynamically-generated-zip-archives-in-django – 2010-12-22 15:01:32

回答

5

的HttpResponse tooks一個字符串,而不是一個路徑。

你應該閱讀該文件內容,並把它作爲第一個參數的HttpResponse:

response = HttpResponse(open(file_path, 'rb').read(),\ 
          content_type='application/zip') 

寫入文件的每個請求可以傷害你的服務器I/O相當嚴重 - 看你的代碼,好像你可以安全地完成記憶中的一切。使用(C)StringIO而不是真實的文件。