我正在设计一个网站。我有一个带复选框的表格。我想根据用户选中的复选框,我发送文件给用户下载。首先我在服务器上保存文件,但现在我意识到这不是一个好方法。因为很多人可能会同时请求文件,所以很多文件都会存储在服务器上。我需要一种方法将可下载的文件发送到客户端,而无需存储在服务器上。你能指导我怎么可能吗? (为了使其能够下载,我将文件存储在媒体文件夹中,并将我可下载文件的数据发送到模板中的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))
答案 0 :(得分:0)
如果客户想下载,他只能下载服务器上的文件。否则你必须是服务器。
答案 1 :(得分:0)
您可以使用Amazon S3并让您的用户直接将其文件上传到S3。
https://stackoverflow.com/a/848251/44816
然后你提供S3网址下载。 S3允许您使用cname,因此S3网址甚至可以位于您的域名下(例如files.example.com)。