nasıl (pdf indirme gibi) görüntü indirmek için kullanıcıyı zorlama mı?

3 Cevap php

Yani orijinal görüntü (varsayılan olarak, bu görüntünün bir resized sürümünü görüntüler) indirmek için bir seçenek ile bir resim galerisi yazdı. Ben bilmek isterdim nasıl ben

Aşağıdaki kod oldukça tarayıcısı ile görüntülerken daha pdf kaydetmek için zorlar, jQuery ile tıklama eylemi bağlanarak görüntüleri (jpg, gif, png) için aynı etkiyi elde etmek isterdim, ben bunu nasıl mümkün olacak ?

Php.net alınan

<?php
// We'll be outputting a PDF
header('Content-type: application/pdf');

// It will be called downloaded.pdf
header('Content-Disposition: attachment; filename="downloaded.pdf"');

// The PDF source is in original.pdf
readfile('original.pdf');
?>

html:

<div class="download">
<a href="http://www.xyz/abc.jpg">
    Download original image</a>
</div>

js:

$(".download").click(function(){
  // call a php to download the image
});

Bunu yapmak mümkün mü?

Düzenleme: Ben javascript kodu ne yapmalıyım?

3 Cevap

Bu mümkün. Sunucu (PHP script) ilk parçasında gösterisi olarak Content-Disposition başlığını göndermek gerekiyor. Örneğin:

header('Content-Disposition: attachment; filename="abc.jpg"');

Bu mümkündür, ancak IE (ne sürpriz ...) ince bir hata vardır:

<?php
header( 'Content-Type: ' . $your_content_type . '; charset=UTF-8' );
if( strpos($_SERVER['HTTP_USER_AGENT'],'MSIE') !== false ) header( 'Content-Disposition: attachment; filename="'.rawurlencode($your_filename).'"' );
else header( 'Content-Disposition: attachment; filename="'.addslashes($your_filename).'"' );
?>

EDIT: javascript yapmak için daha fazla bir şey yoktur! Sadece kullanıcı resmin URL'sini tıklatın izin, ya da sadece görüntü URL'ye tarayıcıyı gönderen bir tıklatma işleyicisi eklemek! On client/browser-side you just cannot decide whether an URL should be downloaded or be displayed!

Genel olarak, karar görüntülemek veya indirilmesine MIME türüne göre tarayıcı tarafından yapılır. Yani bu ne istediğiniz olduğunu düşünüyorum:

If you just want to force a download use the header() function to set the Content-type to be application/octet-stream.

Internet Explorer's MIME-type support is broken, so it does not react to the above. However, if you in addition use the Content-Disposition header you can also force MSIE 5 to download the file.

This header also allows you to specify a filename. This works in both Netscape and MSIE 5.

header("Content-Disposition: attachment; filename=\"myfile.abc\"");

Düzenleme: burada belirli kullanım-davayla alakalı olmayabilir ama, bazı ilginç bilgiler bulunuyor:

Aşağıdaki koşullar doğruysa bu sorun oluşur:

The file name in the content disposition header uses double-byte character set (DBCS) characters, such as Japanese characters. The second byte, or "trailbyte," of any of the DBCS characters contains values that represent file system-reserved characters in ASCII. For example, the "trailbyte" contains values that represent ASCII values such as 0x5c or 0x7c.

Düzenleme 2: Eğer istemci bu yaparken sadece ilgileniyorsanız, burada cevap verdi: http://stackoverflow.com/questions/1153010/force-mime-type-in-browser-with-javascript