如何在django中将可下载文件发送到客户端而不保存服务器上的文件

时间:2012-11-26 06:24:03

标签: django file django-views download

我正在设计一个网站。我有一个带复选框的表格。我想根据用户选中的复选框,我发送文件给用户下载。首先我在服务器上保存文件,但现在我意识到这不是一个好方法。因为很多人可能会同时请求文件,所以很多文件都会存储在服务器上。我需要一种方法将可下载的文件发送到客户端,而无需存储在服务器上。你能指导我怎么可能吗? (为了使其能够下载,我将文件存储在媒体文件夹中,并将我可下载文件的数据发送到模板中的jquery函数)这是我之前的代码:

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))

2 个答案:

答案 0 :(得分:0)

如果客户想下载,他只能下载服务器上的文件。否则你必须是服务器。

答案 1 :(得分:0)

您可以使用Amazon S3并让您的用户直接将其文件上传到S3。

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

然后你提供S3网址下载。 S3允许您使用cname,因此S3网址甚至可以位于您的域名下(例如files.example.com)。