Как избежать принудительной загрузки

Следующие две строки кода отвечают за принудительную загрузку файла MS Excel:

<CFHEADER NAME="Content-Disposition" VALUE="inline; filename=stats.xls">
<cfcontent type="application/msexcel"><cfoutput>#Query2Excel(qONEQUERY)#</cfoutput>  

Как я могу этого избежать? Я бы хотел, чтобы это происходило, когда пользователь нажимает кнопку загрузки.

Пожалуйста, дайте мне знать, как подойти. Спасибо


person Tan    schedule 25.07.2013    source источник


Ответы (2)


Просто сделайте так, чтобы кнопка указывала на страницу, на которой выполняются эти две строки.

person Scott Stroz    schedule 25.07.2013

(Скотт уже ответил вам, но поскольку я уже написал это ...)

Я бы хотел, чтобы это происходило, когда пользователь нажимает кнопку загрузки

Гм ... затем создайте ссылку или кнопку, которая перенаправляет на вашу страницу "загрузки":

     <a href="downloadFauxExcelFile.cfm">Download</a>

Следует помнить о двух вещах:

  • Query2Excel генерирует HTML, который может интерпретировать MS Excel, но технически не настоящий файл Excel (см. форматы файлов Excel). Из-за усиления защиты расширений Excel в некоторых версиях Excel отобразит предупреждение, когда пользователь попытается открыть файл faux-Excel. Единственный способ избежать этого - убедиться, что расширение файла соответствует содержимому, например:

    1. Use the POIUtility.cfc to generate a true Excel file, or for CF9+ use cfspreadsheet
    2. Вместо этого создайте простой файл CSV. Обязательно используйте расширение .csv в cfheader

  • value="inline;..." означает отображение файла в текущем окне браузера (без запроса на загрузку). Обратите внимание: вы не можете принудительно отображать файл "встроенным". Поведение определяет клиент. Если браузер настроен на открытие этого конкретного типа файла, он это сделает. В противном случае браузер отобразит диалоговое окно «Сохранить как» и предложит пользователю сохранить или открыть файл.

person Leigh    schedule 25.07.2013
comment
Спасибо. Я перенес Query2Excel на другую страницу вместе с кодами cfheader и cfcontent. <cfinput name="Creat Excel File" type="submit" value="Download CSV" onClick="downloadExcelFile.cfm"> 1) Но, похоже, он работает на той же странице, пожалуйста, дайте мне знать, что не так? 2) Что мне тогда делать, чтобы сгенерировать настоящий файл Excel? 3) Где можно подробнее прочитать про value=inline. Я ничего не нашел в документации. - person Tan; 25.07.2013
comment
1) Это неправильный синтаксис для onClick. Выполните поиск по перенаправлению JavaScript при нажатии кнопки. 3) Заголовки HTTP действительно не имеют ничего общего с CF. CF просто предоставляет способ их генерировать. Заголовки типа content-disposition определены в http://www.w3.org/Protocols/rfc2616/rfc2616-sec19.html, так что именно здесь нужно смотреть. - person Leigh; 25.07.2013
comment
Или, если вы используете кнопку отправки, измените действие формы, чтобы оно отправлялось на вашу страницу загрузки. - person Leigh; 25.07.2013
comment
Но у меня две кнопки: <cfinput name="submitApply" type="submit" value = "Apply"> and <cfinput name="Creat Excel File" type="submit" value="Download CSV" >. Как вы думаете, создание действия формы не повлияет на первую кнопку - Применить? - person Tan; 25.07.2013
comment
Предполагая, что вам нужны данные из формы для загрузки, вы можете использовать JavaScript, чтобы изменить действие формы в зависимости от того, какая кнопка нажата, а затем отправить форму через JS. Если вы это сделаете, ни одна из кнопок не должна быть кнопкой «отправить». - person Scott Stroz; 25.07.2013