Ранее я задавал вопрос о передаче файлов в браузер, чтобы пользователь получил приглашение на загрузку. Однако эти файлы были просто строками, созданными в конце функции, и было просто передать их в атрибут src iframe для желаемого эффекта.
Теперь у меня есть более амбициозное требование, мне нужно передать в браузер предварительно существующие файлы любого формата. Я попытался сделать это, используя следующий код:
def return_file(request):
try:
bob=open(urllib.unquote(request.POST["file"]),"rb")
response=HttpResponse(content=bob,mimetype="application/x-unknown")
response["Content-Disposition"] = "attachment; filename=nothing.xls"
return HttpResponse(response)
except:
return HttpResponse(sys.exc_info())
При моей первоначальной настройке следующего jQuery было достаточно, чтобы получить желаемое приглашение на загрузку:
jQuery('#download').attr("src","/return_file/");
Однако это больше не будет работать, так как мне нужно передать значения POST в функцию. Моя попытка исправить это приведена ниже, но вместо приглашения на загрузку файл отображается в виде текста.
jQuery.get("/return_file/",{"file":"c:/filename.xls"},function(data)
{
jQuery(thisButton).children("iframe").attr("src",data);
});
Есть идеи, куда я иду не так?
Спасибо!
EDIT:
Теперь я изменил все, так что передача имени файла с помощью POST возвращает номер идентификатора, полученный из базы данных, который при добавлении к URL-адресу вызывает возврат файла. Таким образом / return_file / 1 / возвращает файл с идентификатором 1.
jQuery ('# download'). Attr ("src", "http://localhost/return_file/1/");
где "download" - это идентификатор iframe.
Должен быть лучший способ справиться с загрузкой файлов. У кого-нибудь есть идеи по лучшему методу?