Загрузка iframe при загрузке файла - PullRequest
4 голосов
/ 29 сентября 2010

Я часами вырывал свои волосы, пытаясь понять это.У меня есть iframe, с которым я хочу скачать файл.Все работает нормально, но загрузка iframe не вызывается, если моя Response.ContentType = "APPLICATION/OCTET-STREAM";

Моя функция javascript выглядит следующим образом:

function DownloadStuff(){
var DownloadSource = "http://Apage.aspx"
        var iframe = $("#hiddenDownloader");
        if (iframe.attr("id") === undefined) {
            $('<iframe />', { id: 'hiddenDownloader',  onload:'javascript:alertReady();' }).appendTo('body');
            iframe = $("#hiddenDownloader");
        }
iframe.attr('src', DownloadSource);
}

function alertReady() {
    alert("Ready");
}

Мой код на стороне сервера выглядит так:

Response.Clear();
Response.CacheControl = "no-cache";
Response.Cache.SetCacheability(HttpCacheability.NoCache);
Response.Cache.SetValidUntilExpires(false);
Response.ExpiresAbsolute = DateTime.Parse("1/1/2000");
Response.Expires = 0;
Response.ContentType = "APPLICATION/OCTET-STREAM";
Response.AddHeader("Content-Disposition", "attachment;filename=\"ReportDeck.pptx\"");
byte[] bytes = (byte[])PowerPointFile.Tables[0].Rows[0]["PPTBlob"];
bytes = Compression.DeCompressByteArray(bytes);
Response.OutputStream.Write(bytes, 0, bytes.Length);

Если я удаляю ContentType и Header, вызывается onload, но затем файл не загружается через диалоговое окно сохранения файла, а вместо этого записывается в iframe.

С уважением, Байрон Кобб.

1 Ответ

4 голосов
/ 29 сентября 2010

Ну да.onload вызывается только когда документ загружается в iframe.Операция сохранения не загружает документ во фрейм;старый документ остается на месте, и появляется диалоговое окно сохранения как.

Вы не можете обнаружить, что загрузка файла была принята или завершена только с помощью JavaScript.Если вам действительно нужно это обнаружить, самое близкое, что вы могли бы получить, - это сохранить на стороне сервера процесс загрузки с помощью уникального идентификатора и предоставить AJAX-интерфейс для клиентского скрипта для запроса.закончил ли сервер отправку файла.

Кстати:

onload:'javascript:alertReady();'

сомнительно.Вам не нужно и не следует использовать javascript: в атрибутах обработчика событий (это только для href="javascript:..." URL, которые также никогда не должны использоваться!).И установка атрибута обработчика события в строку из JS является очень хитрым.Передача onload: alertReady напрямую будет лучше, или, поскольку вы используете jQuery, используйте стандартные методы привязки, такие как iframe.load(function() { ... });.

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