浏览器请求文件,服务器下载pdf,浏览器在iframe中显示pdf

时间:2013-09-09 06:44:32

标签: javascript django pdf python-requests

这就是我想要做的: 1)浏览器向服务器发起ajax请求,要求提供pdf。 2)服务器下载pdf,并返回pdf以供显示。 3)浏览器在预先存在的iframe中显示下载的pdf。

以下是我的代码。它似乎停在iframe部分,但我怀疑它没有正确发送pdf。

浏览器index.html文件:

var uri = '/viewer/loaddrawing/';
$.getJSON(uri, {key:value}, function(data, jqXHR){
    document.getElementById("iframetitle").src = uri;               
});

Django服务器views.py文件:

import requests
def loaddrawing(request):
    value = request.GET.get('key')
    #the key is used to generate a unique url, but for test purposes lets use the url shown below
    url = "http://cbmeturkey.com/media/109/test.pdf"
     response = urllib2.urlopen(url)
     some_data = response.read()
    return HttpResponse(some_data, mimetype='application/pdf')

编辑:

我还有一个问题:我不想在我的index.html文件中使用下面的代码,因为我想实际下载pdf并再次使用它。这样做的原因是我的index.html页面使用javascript来显示和隐藏iframe,并且使用下面的代码,每次显示iframe时都会重新加载pdf。

var uri = '/viewer/loaddrawing/';
document.getElementById('iframetitle').src = uri + '?key=' + value;

解决: 上述问题在Augusto的指示和以下index.html代码之后得到解决,该代码仅加载pdf一次,但注意现在我正在修改div(名为“divtitle”)而不是iframe:

var uri = '/viewer/loaddrawing/' + '?key=' + value;
var htm = '\<iframe src="' + uri +'" onload="downloadComplete()">\</iframe>';
document.getElementById('divtitle').innerHTML = htm;

1 个答案:

答案 0 :(得分:1)

你的意思可能只是:

var uri = '/viewer/loaddrawing/';
document.getElementById('iframetitle').src = uri + '?key=' + value;

不涉及JSON,因此iframe将直接获得PDF。但是,请注意客户端必须具有PDF查看器插件,否则浏览器将要求下载提示。