最终目标:我想创建一个用户可以在表单中输入信息的网页.有了这些信息,我想通过将给出的信息插入到模板中然后强制下载来创建一个html文件(下面称为test-download.html).由于我想在即将举行的研讨会上展示这一点,人们将在"同一时间"使用它,我不想将文件保存在服务器上,只是强制下载.
到目前为止:我在我的html文件(test.html)中有这个:
<form action="test.php" method="post">
To file: <input type="text" name="tofile" />
<input type="submit" />
</form>
Run Code Online (Sandbox Code Playgroud)
这在我的test.php中:
<?php
$filename = 'test-download.html';
$htmlcode1 = "<HTML> \n <BODY>";
$htmlcode2 = "</BODY> \n <HTML>";
$somecontent = $htmlcode1.$_POST["tofile"].$htmlcode2;
!$handle = fopen($filename, 'w');
fwrite($handle, $somecontent);
fclose($handle);
header("Cache-Control: public");
header("Content-Description: File Transfer");
header("Content-Length: ". filesize("$filename").";");
header("Content-Disposition: attachment; filename=$filename");
header("Content-Type: application/octet-stream; ");
header("Content-Transfer-Encoding: binary");
readfile($filename);
?>
Run Code Online (Sandbox Code Playgroud)
这将覆盖文件test-download.html文件并强制下载.
问题:如何在不弄乱服务器上的文件(test-download.html)的情况下执行此操作?
我想知道是否有任何方法可以使用Javascript/jQuery下载(打开下载对话框)图像,以便浏览器不会只显示它.
我正在尝试使用ZF2强制下载.这是我的代码的片段
use Zend\Http\Request;
.....
public function downloadAction() {
$response = new Request();
$response->setHeaders(Request::fromString("Content-Type: application/octet-stream\r\nContent-Length: 9\r\nContent-Disposition: attachment; filename=\"ultimate_remedy_readme.txt\""));
}
Run Code Online (Sandbox Code Playgroud)
现在我收到了这个错误
/var/www/whowantsmymoney/vendor/zendframework/zendframework/library/Zend/Http/Request.php:88
Run Code Online (Sandbox Code Playgroud)
信息:
A valid request line was not found in the provided string
Run Code Online (Sandbox Code Playgroud)
堆栈跟踪:
#0 /var/www/whowantsmymoney/module/Admin/src/Admin/Controller/LanguageController.php(93): Zend\Http\Request::fromString('Content-Type: a...')
Run Code Online (Sandbox Code Playgroud) 我用php zip(http://php.net/manual/de/book.zip.php)创建了一个zip文件
现在我必须将它发送到浏览器/强制下载它.
我正在尝试向用户提供大型zip文件.当有2个并发连接时,服务器内存不足(RAM).我将内存量从300MB增加到4GB(Dreamhost VPS)然后它工作正常.
我需要允许超过2个并发连接.实际的4GB将允许20个并发连接(太糟糕).
好吧,我正在使用的当前代码需要内存的两倍,然后是实际的文件大小.这太糟糕了.我希望将文件"流式传输"给用户.所以我分配的不仅仅是为用户提供的块.
以下代码是我在CodeIgniter(PHP框架)中使用的代码:
ini_set('memory_limit', '300M'); // it was the maximum amount of memory from my server
set_time_limit(0); // to avoid the connection being terminated by the server when serving bad connection downloads
force_download("download.zip", file_get_contents("../downloads/big_file_80M.zip"));exit;
Run Code Online (Sandbox Code Playgroud)
force_download函数如下(CodeIgniter默认帮助函数):
function force_download($filename = '', $data = '')
{
if ($filename == '' OR $data == '')
{
return FALSE;
}
// Try to determine if the filename includes a file extension.
// We need it in order to set the MIME type
if …Run Code Online (Sandbox Code Playgroud) 我有一个问题,已经多次上升,但我似乎无法找到我的解决方案!我正在尝试将pdf文件发送到客户端而不在浏览器中打开,文件下载但是当我打开它并且从原始文件中丢失了相当多的字节时它已损坏.我已经尝试了几种这样的方法来下载文件,但我只会向您展示我使用过的最新版本并希望得到一些反馈.
我还在文本编辑器中打开了下载的PDF,并且我可以看到它顶部没有php错误!
我也知道readfile()要快得多,但出于测试目的,我迫不及待地想要做任何事情,所以我使用了while(!feof())方法!
无论如何漫无边际,继承代码(取自我下载的文件为什么总是损坏或损坏?):
$file = __DIR__ . '/reports/somepdf.pdf';
$basename = basename($file);
$length = sprintf("%u", filesize($file));
header('Content-Description: File Transfer');
header('Content-Type: application/octet-stream');
header('Content-Disposition: attachment; filename="' . $basename . '"');
header('Content-Transfer-Encoding: binary');
header('Connection: Keep-Alive');
header('Expires: 0');
header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
header('Pragma: public');
header('Content-Length: ' . $length);
ob_clean();
set_time_limit(0);
readfile($file);
Run Code Online (Sandbox Code Playgroud)
另外要注意的是文件大小的差异:
Original: 351,873 bytes
Downloaded: 329,163 bytes
Run Code Online (Sandbox Code Playgroud) 我使用Symfony2 Framework并使用以下代码导出xml文件:
$response->setStatusCode(200);
$response->headers->set('Content-Type', 'application/xml');
$response->headers->set('Content-Description', 'Submissions Export');
$response->headers->set('Content-Disposition', 'attachment; filename="' . $filename .'"');
$response->headers->set('Content-Transfer-Encoding', 'binary');
$response->headers->set('Pragma', 'no-cache');
$response->headers->set('Expires', '0');
Run Code Online (Sandbox Code Playgroud)
无论我是否采用"Content-Transfer-Encoding"或"Pragma"或其他所有内容,除了"Content-Type"和"Content-Disposition"之外.Chrome中的结果总是:"filename-,attachment"(没有").在Firefox中,这很好用.
例如,如果我有一个名为home.xml的文件,Firefox将下载home.xml,而Chrome会给我home.xml-,附件.
php google-chrome content-disposition force-download symfony
我正在使用强制下载主要下载网站上的拉链和mp3(http://pr1pad.kissyour.net) - 跟踪谷歌分析,数据库中的下载并隐藏真正的下载路径:
就是这样:
extending CI model
... - bunch of code
function _fullread ($sd, $len) {
$ret = '';
$read = 0;
while ($read < $len && ($buf = fread($sd, $len - $read))) {
$read += strlen($buf);
$ret .= $buf;
}
return $ret;
}
function download(){
/* DOWNLOAD ITSELF */
ini_set('memory_limit', '160M');
apache_setenv('no-gzip', '1');
ob_end_flush();
header("Pragma: public");
header("Expires: 0");
header("Cache-Control: must-revalidate, post-check=0, pre-check=0");
header("Cache-Control: public",FALSE);
header("Content-Description: File Transfer");
header("Content-type: application/octet-stream");
if (isset($_SERVER['HTTP_USER_AGENT']) &&
(strpos($_SERVER['HTTP_USER_AGENT'], 'MSIE') !== false)) …Run Code Online (Sandbox Code Playgroud) 可能重复:
如何自动强制下载PDF格式?
我检查了其他论坛,但我不明白他们说什么.我已经检查了这个链接,人们似乎确实得到了解决方案:
http://css-tricks.com/snippets/htaccess/force-files-to-download-not-open-in-browser/
我想做一个用于下载PDF的按钮,该文件太大而无法在线查看.所以我希望该按钮强制浏览器下载文件.询问或不询问用户.将有不同的PDF名称文件,因此我需要使用各种PDF文件的PDF格式下载此按钮.
我已经检查了不同的网站,似乎可以使用htaccess完成,但老实说,我不知道如何做到这一点.有人可以帮我告诉我如何做到这一点!?!?!通过CSS/html有一个简单的方法吗?
对于这么小的细节,我已经被困了很长时间.
我的代码很简单:
<div class="Container for icons">
<a href="hugefile.pdf" alt=""><img href="icon.png" alt=""/>
</div>
Run Code Online (Sandbox Code Playgroud)
有人可以帮我这个吗?
我正在编写一个Google Chrome扩展程序,可让您下载数据的备份文件.我希望用户能够按下按钮并打开"另存为"对话框,他们可以将文件保存到他们的计算机上.似乎没有任何工作,我没有在互联网上找到答案.我尝试了几种方法:
document.execCommand('SaveAs', null, 'filename.json');这不起作用,因为此命令仅限IE,并且似乎没有Webkit替代方案ctrl/cmd+s从数据URI访问页面)XMLHTTPRequest.我没有试过这个,但是必须有一些方法可以转发请求吗?请注意,我不想使用外部服务器(在这种情况下,我可以简单地发送POST请求并应用Content-disposition:-header)我不想使用任何外部服务器的原因是我不想为托管付费,并且发送的数据可能对用户敏感,我不想侵犯任何人的隐私.
有没有人得到这个工作?
force-download ×10
php ×7
header ×2
apache ×1
codeigniter ×1
corrupt ×1
createfile ×1
file ×1
file-io ×1
javascript ×1
jquery ×1
pdf ×1
symfony ×1
webkit ×1
zip ×1