Как заставить всплывающее окно отображать сообщение, а затем представить загрузку через 5 секунд, а затем закрыть всплывающее окно - PullRequest
2 голосов
/ 11 декабря 2011

В моем проекте у меня есть файл, который я хочу, чтобы пользователь скачал.Когда они нажимают на ссылку, я хочу, чтобы во всплывающем окне отображалось: «Ваша загрузка скоро начнется, если она не начнется, нажмите здесь».Через несколько секунд он закроется и отобразится фактическая загрузка файла.

Я знаю, что для закрытия окна вы будете использовать:

window.setTimeout(function(){window.close()}, 5000);

Но я неуверены, как бы вы назвали загрузку после закрытия окна?

Ура за любую помощь!

Ответы [ 2 ]

2 голосов
/ 11 декабря 2011

Простым способом, используйте window.open(), чтобы начать загрузку файла.

<a href="myfile.doc" id="download">Direct link</a>

<script type="text/javascript">
    setTimeout(function() {
        window.open("myfile.doc");
    },3000);
</script>
2 голосов
/ 11 декабря 2011

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

РЕДАКТИРОВАТЬ: Теперь вы знаете, что пользователь использует PHP, поэтому добавил фрагмент кода для PHP (не надежныйно я не PHP разработчик) ...

1) ЖЕ PHP / ASP Получаете ли вы файл, который не будет отображаться в браузере автоматически?т.е. .js будет отображаться как есть, но exe-файл, вероятно, вызовет диалог загрузки файлов (кто-то исправит меня, если я ошибаюсь, и я обновлю)

Если ваши файлы всегда будут, т.е. .exe, тогда вывозможно, просто сойдет с рук:

$("body").append("<iframe src='http://www.targetsite.com/files/thefilename.exe'></iframe>");

, но, скорее всего, вы будете использовать параметр, чтобы найти нужный файл (и скрыть прямую загрузку

$("body").append("<iframe src='http://www.targetsite.com/downloader/?file=1234-1234-1234'></iframe>");

в некоторой функции setTimeout.

Если типы файлов неизвестны, я предлагаю указать приведенный выше код в файле сценария (.ashx, php и т. Д.), Который записывает поток байтов файла в ответ http.

ДЛЯ PHP:

<?php    // Demo - send a (binary) file

$file = "ireland.jpg";//here you would use the query string parameter of the above
                      //ajax/iframe request eg file=1234-1234-1234 to find image in db
$fp = fopen($file,"r") ;

header("Content-Type: image/jpeg");//this would need to be modified to either show right content type or you could
                                   //set it to Application/force-download

while (! feof($fp)) {
       $buff = fread($fp,4096);
       print $buff;
       }
?>

ПРЕДУПРЕЖДЕНИЕ Будьте осторожны с приведенным выше кодом. Мне пришло в голову, что вы можете напрямую указать имя файла, которое, я уверен, кто-то может использовать для получения файлов в других местах вашего приложения.без особого внимания

ДЛЯ ASP:

Я включил пример решения ashx (универсальный обработчик):

aspx.cs

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using Wardle.PdfGenerator;
using System.IO;

public partial class user_account_iframedownloader : System.Web.UI.Page
{
    private IInformixRepository _rep;
    //this page gets loaded into an iframe so we can do downloads while using ajax
    protected void Page_Load(object sender, EventArgs e)
    {
         //write bytes out here i.e. see after for methods

    }
}

Пример байтовых методов вывода (you jНужно сделать File.getBytes или что-то еще - мой код довольно сложный, поэтому 'упражнение для читателя'

public static void PdfOutput(byte[] pdfData, string filename)
{
    HttpContext.Current.Response.ContentType = "Application/pdf";
    HttpContext.Current.Response.AddHeader("Content-Disposition", "attachment; filename=\"" + filename);
    HttpContext.Current.Response.BinaryWrite(pdfData);
}
public static void PdfZipOutput(byte[] zipData, string filename)
{
    HttpContext.Current.Response.ContentType = "Application/zip";
    HttpContext.Current.Response.AddHeader("Content-Disposition", "attachment; filename=\"" + filename);
    HttpContext.Current.Response.BinaryWrite(zipData);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...