Django / jQuery - читать файл и передавать в браузер в качестве запроса на загрузку файла - PullRequest
4 голосов
/ 15 июня 2010

Ранее я задавал вопрос о передаче файлов в браузер, чтобы пользователь получил приглашение на загрузку. Однако эти файлы были просто строками, созданными в конце функции, и было просто передать их в атрибут 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.

Должен быть лучший способ справиться с загрузкой файлов. У кого-нибудь есть идеи по лучшему методу?

1 Ответ

2 голосов
/ 15 июня 2010

Почему бы просто не использовать bob.read() так же, как вы ранее использовали строку, построенную по-другому? Кажется самым простым!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...