强制浏览器使用Javascript window.open下载图像?

是否有一种方法可以使图像下载一次(没有右键单击保存图像 )?

我正在使用一个小的Javascript函数来调用下载页面:

<a href="#" onclick="window.open('download.php?file=test.jpg', 'download', 'status=0');" >Click to download</a> 

在download.php页面中,我有这样的:

 $file = $_GET['file']; header('Content-Description: File Transfer'); header("Content-type: image/jpg"); header("Content-disposition: attachment; filename= ".$file.""); readfile($file); 

但它不起作用。 我究竟做错了什么?
提前致谢!

使用application / octet-stream而不是image / jpg

如果在application / octet-stream内容types的响应中使用了Content-Disposition头部,暗示的build议是用户代理不应该显示响应,而是直接input'save response as …'对话。
– RFC 2616 – 19.5.1内容处置

我想你忘了在标题上添加path

 if(isset($_GET['file'])){ //Please give the Path like this $file = 'images/'.$_GET['file']; if (file_exists($file)) { header('Content-Description: File Transfer'); header('Content-Type: application/octet-stream'); header('Content-Disposition: attachment; filename='.basename($file)); header('Content-Transfer-Encoding: binary'); header('Expires: 0'); header('Cache-Control: must-revalidate, post-check=0, pre-check=0'); header('Pragma: public'); header('Content-Length: ' . filesize($file)); ob_clean(); flush(); readfile($file); exit; } } 

或者,您可以使用.htaccess文件来处理所有图像文件。 如果您想要强制浏览器下载所有的图片(表格列表中的fe):

 RewriteEngine On RewriteBase / RewriteCond %{QUERY_STRING} ^download$ RewriteCond %{REQUEST_FILENAME} !-f RewriteRule .(jpe?g|gif|png)$ index.php?file=noFoundFilePage [L,NC] RewriteCond %{QUERY_STRING} ^download$ RewriteCond %{REQUEST_FILENAME} -f RewriteRule .(jpe?g|gif|png)$ - [L,NC,T=application/octet-stream] 

这看起来像试图强制下载到浏览器中的图像文件。 -f RewriteConds还检查文件是否存在。最后一个规则确保下载仅用于某些文件types。

这对我有效

 header("Pragma: public"); header('Content-disposition: attachment; filename='.$title); header("Content-type: ".mime_content_type($sample_file)); header('Content-Transfer-Encoding: binary'); ob_clean(); flush(); readfile($sample_file); 

我还将以下内容添加到.htaccess

 SetEnvIf Request_URI "\.jpg$" requested_jpg=jpg Header add Content-Disposition "attachment" env=requested_jpg 

不知道这是否有帮助?

如果你在一个Apache服务器上,这非常简单。

  1. 在您的文件所在的目录中创build一个名为.htaccess的文件。 对我来说,它是assets/.htaccess
  2. 将以下内容添加到文件AddType application/octet-stream .jpg 。 您可以为每个需要的文件扩展名添加一行。 例如AddType application/octet-stream .pdf
  3. 保存你的文件
  4. 清除您的浏览器caching
  5. 刷新你的浏览器,享受!

一旦你添加了Content-Disposition: attachment头,你应该可以使用普通的链接:

 <a href="download.php?file=test.jpg">Click to download</a> 

你用过什么浏览器?

这是一个button,您可以在Internet Explorer中点击下载图片

 <html> <head> <title>Your title</title> </head> <body> <form><input type="button" value="Click Me" onClick="window.location.href='image.jpg'"></form> </body> </html> 

浏览器可以识别jpg的URL's并把它们像.htm一样传递给所有用户,所以我不认为你可以在用户端强制它(尽pipe如此,并不积极)。

读这个

http://apptools.com/phptools/force-download.php

看看这是否有帮助:

Webkit和Excel文件(PHPexcel)

尝试改变这一点:

 header("Content-disposition: attachment; filename= ".$file.""); 

至:

 header("Content-disposition: attachment; filename= ".$file); 

如果上述不适用于你,这里有一个强制文件可下载的函数:

  <?php function downloadFile($file, $type) { header("Cache-Control: public"); header("Content-Description: File Transfer"); header("Content-Disposition: attachment; filename=$file"); header("Content-Type: Content-type: $type"); header("Content-Transfer-Encoding: binary"); header("Content-Length: ".filesize($file)); readfile($file); } downloadFile("sd.jpg", "image/jpg"); ?> 

这是一种强制某个目录中的所有文件被提示下载的方法。

需求

  1. 阿帕奇
  2. 启用了mod_headers

在你的.htaccess或者Apacheconfiguration中input以下内容。

 <Directory /path/to/downloadable/files> Header set Content-Disposition attachment Header set Content-Type application/octet-stream </Directory>