2012-11-26 63 views
0

我正在設計一個網站。我有一個帶有複選框的表單。我想根據哪個複選框被用戶選中,我發送一個文件給用戶下載它。首先我將文件保存在服務器上,但現在我意識到這不是一個好方法。因爲可能會有很多人同時請求文件,所以很多文件都會存儲在服務器上。我需要一種方法將可下載的文件發送到客戶端,而不必在服務器上存儲。你能指導我怎麼可能嗎? (爲了讓下載,能夠我存放在媒體文件夾中的文件和我發送的數據是下載,能夠文件模板我的jQuery功能的URL),這是我以前的代碼:如何發送可下載的文件到django中的客戶端而不保存服務器上的文件

def dlFunc(request): 
    if request.is_ajax(): 
     authObject = socAuthenticationBackend() 
     if request.method == 'POST': 
      form = backupForm(request.POST) 
      if form.is_valid(): 
       //do form processing    
       //receives file from server with web service 
       downloadFileDecoded = base64.b64decode(downloadFile) 
       randomNum = random.random() 
       strRandomNum = str(randomNum) 
       randPart = strRandomNum.split('.') 
       try: 
        f = open("media/downloadFiles/backup"+randPart[1]+".tar.gz","w") 
        try: 
         f.write(downloadFileDecoded) 
         data = "/media/downloadFiles/backup"+randPart[1]+".tar.gz"   
        finally: 
         f.close() 
       except IOError: 
        data = "error" 
       return HttpResponse(data) 
     else: 
      form = backupForm()      
     return render_to_response('backup.html', RequestContext(request, { 'form':form}))  
    else: 
     return render_to_response("ajax.html", {}, context_instance=RequestContext(request)) 

回答

0

如果客戶希望下載,他只能下載生活在服務器上的文件。否則,你必須是服務器。

+0

謝謝...你的意思是沒有辦法做到這一點?是的,客戶想要下載文件。你的意思是它應該在服務器上?所以,它可能會導致在服務器上保存大量文件的問題。你知道有些時候我想下載一個文件,它並不告訴我音量。它似乎是流媒體(我不知道該說什麼),並且不保存在該服務器上,它只是來到我(客戶端),因此它的音量不清晰。我認爲應該有一種方法... – user1597122

+0

如果有的話,那麼你應該在服務器的另一部分服務你的文件,這只是我的願景。我不知道它是否工作..但沒有服務器,你不能提供文件,這是肯定的 – doniyor

0

您可以使用Amazon S3並讓您的用戶直接將文件上傳到S3。

https://stackoverflow.com/a/848251/44816

然後您下載提供S3網址。 S3允許您使用cname,因此S3 url甚至可以在您的域名下(例如files.example.com)。

+0

謝謝,但在我的情況下,客戶端不想上傳文件。我(從服務器)想要發送文件到客戶端,客戶端想要下載。 – user1597122

+0

這更簡單。將文件上傳到S3併爲您的客戶提供鏈接。無論下載多長時間或下載多少次,您基本上只需支付帶寬。 – Enrico

相關問題