2012-11-26 37 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

相关问题