"लिंक के रूप में सहेजें ..." को खोलने के लिए पाठ में लिंक पॉपअप HTML में पीडीएफ के लिए क्लिक करें


173

मेरी वेबसाइट पर कुछ बड़े आकार के पीडीएफ कैटलॉग हैं, और मुझे इन्हें डाउनलोड करने के लिए लिंक करना होगा। जब मैंने गुगली की, तो मैंने पाया कि ऐसी चीज़ नीचे दी गई है। इसे लिंक क्लिक पर " Save As ... " पॉपअप खोलना चाहिए ...

 <head>
    <meta name="content-disposition" content="inline; filename=filename.pdf">
    ...

लेकिन यह काम नहीं करता है: / जब मैं नीचे दिए गए फ़ाइल से लिंक करता हूं, तो यह केवल फ़ाइल से लिंक होता है और फ़ाइल को खोलने का प्रयास कर रहा है।

    <a href="filename.pdf" title="Filie Name">File name</a>

अद्यतन (नीचे दिए गए उत्तरों के अनुसार):

जैसा कि मैंने देखा कि इसके लिए कोई 100% विश्वसनीय क्रॉस-ब्राउज़र समाधान नहीं है। संभवतः सबसे अच्छा तरीका नीचे सूचीबद्ध वेब सेवाओं में से एक का उपयोग कर रहा है, और एक डाउनलोड लिंक दे रहा है ...


1
पीडीएफ फाइलों के लिए mimetype की सेवा न करें।
भूप्स 27:10

मैंने आपके अद्यतन समाधान की कोशिश की, आर्टमेनिया - लेकिन वही समस्या जो मुझे सफारी में हो रही है। मुझे ब्राउज़र विंडो में पीडीएफ जैसा दिखता है, और जब मैं "पूर्वावलोकन" या "डाउनलोड" टैब पर क्लिक करता हूं, तो नीचे मुझे वह खोज सुविधा मिलती है जिसकी मुझे सख्त आवश्यकता है।
हेथवैलर


समान लेकिन कम फ़ाइल प्रकार विशिष्ट: stackoverflow.com/questions/1465573/…
Ciro Santilli 病 specific specific specific 事件

जवाबों:


267

लिंक को क्लिक करने के बाद फाइल को बचाने के लिए फोर्स के जवाब से :

<a href="path/to/file" download>Click here to download</a>

17
इस टिप्पणी के समय, downloadविशेषता क्रोम, फ़ायरफ़ॉक्स और ओपेरा तक सीमित है। आईई और सफारी के हाल के संस्करण भी इसका समर्थन नहीं करते हैं। भविष्य के समर्थन के लिए: caniuse.com/#feat=download की जाँच करें !
Sygmoral

Netbeans त्रुटि जाँच इसके बारे में शिकायत करती है, लेकिन यह ठीक काम करता है। डाउनलोड = "MyFile.txt": तुम कितने तरह नई फ़ाइल के लिए एक प्रारंभिक नाम निर्दिष्ट कर सकते हैं
yster

1
यह टिप्पणी लिखने के समय एज में काम करता है, और लगता है कि हाइपरलिंक किए गए पीडीएफ को बंद करने का एकमात्र तरीका है एज के पीडीएफ दर्शक में बहुत खराब प्रयास।

इस टिप्पणी के समय, मैंने इसे Chrome, Opera, Edge, Mozilla पर परीक्षण किया है। सभी नवीनतम। मोज़िला को छोड़कर सभी पर काम कर रहा है।
एसआई

7
यह केवल वही-मूल लिंक के लिए काम करता है, जैसा कि caniuse.com/#feat=download पर उल्लिखित है । यदि आपके लिंक क्रॉस-ऑरिजिनल हैं, तो आपका एकमात्र विकल्प (अभी के लिए) प्रतिक्रिया प्रकार को "एप्लिकेशन / ऑक्टेट-स्ट्रीम" के लिए बाध्य करना है, जैसा कि कई उत्तर सुझाते हैं। यदि आपके पास सर्वर तक पहुंच नहीं है, तो आप इसे प्रॉक्सी करने और मैन्युअल रूप से प्रतिक्रिया हेडर सेट करने का प्रयास कर सकते हैं।
जीन-बैप्टिस्ट

80
<a href="file link" download target="_blank">Click here to download</a>

यह फ़ायरफ़ॉक्स और क्रोम में मेरे लिए काम करता है।


2
यह वास्तव में मौजूदा शीर्ष उत्तर के समान है, हालांकि, 2013 में आयुष गुप्ता से। target="_blank"यह गैर-सहायक ब्राउज़रों के लिए थोड़ा अधिक प्रयोग करने योग्य बना सकता है, हालांकि (पीडीएफ तब नई विंडो / टैब में खुलता है, बजाय वर्तमान पृष्ठ को ओवरराइट किए)।
सिग्मोरल

3
मेरे लिए, केवल target="_blank"आवश्यक था कि downloadकेवल डाउनलोड को ठीक से ट्रिगर करने में विफल रहा (क्रोम)
कैसर्फ

2
यदि आप downloadविशेषता में एक स्ट्रिंग देते हैं, तो इसका उपयोग फ़ाइल नाम के रूप में किया जाएगा। मैं इसे हर समय उपयोगकर्ताओं के लिए उपयोग कर रहा हूँ।
कमजोर स्वभाव

34

मेटा टैग इस परिणाम को प्राप्त करने का एक विश्वसनीय तरीका नहीं है। आम तौर पर आपको ऐसा नहीं करना चाहिए - यह उपयोगकर्ता / उपयोगकर्ता एजेंट को यह तय करने के लिए छोड़ दिया जाना चाहिए कि आपके द्वारा प्रदान की गई सामग्री के साथ क्या करना है। उपयोगकर्ता हमेशा अपने ब्राउज़र को फ़ाइल को डाउनलोड करने के लिए बाध्य कर सकता है यदि वे चाहें।

यदि आप अभी भी फ़ाइल डाउनलोड करने के लिए ब्राउज़र को मजबूर करना चाहते हैं, तो सीधे HTTP हेडर को संशोधित करें। यहाँ एक PHP कोड उदाहरण है:

$path = "path/to/file.pdf";
$filename = "file.pdf";
header('Content-Transfer-Encoding: binary');  // For Gecko browsers mainly
header('Last-Modified: ' . gmdate('D, d M Y H:i:s', filemtime($path)) . ' GMT');
header('Accept-Ranges: bytes');  // Allow support for download resume
header('Content-Length: ' . filesize($path));  // File size
header('Content-Encoding: none');
header('Content-Type: application/pdf');  // Change the mime type if the file is not PDF
header('Content-Disposition: attachment; filename=' . $filename);  // Make the browser display the Save As dialog
readfile($path);  // This is necessary in order to get it to actually download the file, otherwise it will be 0Kb

ध्यान दें कि यह HTTP प्रोटोकॉल का एक विस्तार है; कुछ ब्राउज़र इसे वैसे भी अनदेखा कर सकते हैं।


4
व्यवहार में मेरा मानना ​​है कि यह व्यापक रूप से लागू है।
मैथ्यू विल्सन

यह सबसे अच्छा समाधान, परेशानी मुक्त और काम करता है। आप इस पद्धति का उपयोग करके किसी भी फ़ाइल प्रकार को सीधे डाउनलोड कर सकते हैं। +1
कैस्राफ

3
HTTP में Content-Transfer-Encoding मौजूद नहीं है। सामग्री-एन्कोडिंग: कोई भी बेकार नहीं है।
जूलियन रेस्चके

अपने उत्तर में नोट करें, कि यदि फ़ाइल बाहरी सर्वर / डोमेन से है, तो यह उत्तर हल नहीं हो सकता है ...
T.Todua

जब फ़ाइल बड़ी (मेरे मामले में 80 एमबी) मिलती है, तो मैं यह जोड़ना चाहता हूं कि मेरे पास यह या समान कोड कुछ सर्वरों पर विफल है। का उपयोग ob_end_flush()कर या तो मदद नहीं की।
हेंड्रिक

22

मेरे पास यही मुद्दा था और एक ऐसा समाधान मिला जिसने अब तक बहुत काम किया है। आपने अपनी .htaccessफ़ाइल में निम्न कोड डाला :

<FilesMatch "\.(?i:pdf)$">
  ForceType application/octet-stream
  Header set Content-Disposition attachment
</FilesMatch>

यह फोर्स से एक फाइल डाउनलोड करने के बजाय ब्राउज़र में दिखाई देने के लिए आया था ।


4
यह अच्छी तरह से काम किया, क्योंकि मेरे पास डाउनलोड के लिए एक विशेष दस्तावेज़ निर्देशिका थी। मैंने ForceType को छोड़ दिया, बस प्रकारों को इस प्रकार रहने दिया। मुझे केस-असंवेदनशील की भी जरूरत नहीं थी; मेरा मामला पहले से असंवेदनशील लग रहा है। मैंने कुछ अतिरिक्त प्रकार जोड़े हैं, जिसमें पुराने / नए कार्यालय एक्सटेंशन के लिए वैकल्पिक-एक्स भी शामिल है:<FilesMatch "\.(pdf|xlsx?|docx?)$">
goodeye

यह आश्चर्यजनक रूप से काम किया, यहां तक ​​कि ओएसएक्स सफारी में भी, जहां अन्य उत्तर के रूप में (स्वीकृत एक सहित, जैसा कि एक टिप्पणीकर्ता ने बताया है) सीमित ब्राउज़रों तक सीमित हैं जो दिए गए HTML सुविधा का समर्थन करते हैं। यह मेरे लिए अधिक आदर्श लगता है क्योंकि यह बोर्ड भर में काम करता था, हालांकि इसके लिए सर्वर कॉन्फ़िगरेशन फ़ाइलों तक उच्च-स्तरीय पहुंच की आवश्यकता होती है।
जूल

आप अपने apache.conf फ़ाइल में वह अधिकार डाल सकते हैं, मैं .htaccess का उपयोग नहीं करता क्योंकि यह अधिक संसाधन लेता है।
माइकल फीवर

Windows- होस्ट की गई वेब साइट इसे कैसे लागू करेगी, क्योंकि वे htaccess फ़ाइलों को नहीं पढ़ सकते हैं?
पोलोहोलसेट

9

मुझे फ़ायरफ़ॉक्स के लिए एक बहुत ही सरल समाधान मिला (केवल एक प्रत्यक्ष href के बजाय एक रिश्तेदार के साथ काम करता है): जोड़ें type="application/octet-stream":

<a href="./file.pdf" id='example' type="application/octet-stream">Example</a>

1
@ मर्टिन क्रोम पर क्रोम ओएस और लिनक्स पर फ़ायरफ़ॉक्स। काम करने के लिए फ़ाइल को स्थानीय होना ज़रूरी है। मेरा href क्लाउड स्टोरेज के लिए एक यूआरएल था।
ttfreeman

7

इस लाइन को अपनी .htaccess फ़ाइल में जोड़ने का प्रयास करें।

AddType application/octet-stream .pdf

मुझे आशा है कि यह स्वतंत्र होगा क्योंकि यह ब्राउज़र स्वतंत्र है।


मुझे यह जानने में दिलचस्पी होगी कि यह क्यों घटाया गया है - यह सबसे सरल तरीकों और कार्यों में से एक है: css-tricks.com/snippets/htaccess/…
नाथन हॉर्बी

लोग मुफ्त होस्टिंग साइटों पर एक सर्वर की मुख्य कार्यक्षमता को संशोधित करने की कोशिश करते हैं और फिर डाउनवोट करते हैं क्योंकि वे इसे काम करने के लिए नहीं प्राप्त कर सकते हैं। हर दूसरे समाधान में कैविएट होंगे क्योंकि इसे बदलने के लिए एक "हैक" है।
कार्ट

मैं इसे नीचा दिखा रहा हूं क्योंकि यह समस्या का गलत समाधान है। संसाधनों के प्रकार के साथ खिलवाड़ करना एक बुरा विचार है।
ब्रैड

@NathanHornby - मैंने इसे डाउनवोट नहीं किया, लेकिन यह किसी भी विंडोज होस्टेड साइट के लिए काम नहीं करेगा, क्योंकि वे .htaccess का उपयोग नहीं करते हैं।
पोलोहोलसेट

मैं नीचे नहीं गया, लेकिन यह समाधान आँख से उस प्रत्यय की सभी फाइलों को प्रभावित करता है। यह अंधाधुंध है और इसलिए सभी मामलों में उचित नहीं होगा।
JBH

6

आम तौर पर ऐसा होता है, क्योंकि कुछ ब्राउज़र सेटिंग्स या प्लग-इन सीधे पीडीएफ को एक साधारण वेब पेज की तरह एक ही विंडो में खोलते हैं।

निम्नलिखित आपकी मदद कर सकता है। मैंने इसे कुछ साल पहले PHP में किया है। लेकिन वर्तमान में मैं उस प्लेटफॉर्म पर काम नहीं कर रहा हूं।

<?php
    if (isset($_GET['file'])) {
        $file = $_GET['file'];
        if (file_exists($file) && is_readable($file) && preg_match('/\.pdf$/',$file)) {
            header('Content-type: application/pdf');
            header("Content-Disposition: attachment; filename=\"$file\"");
            readfile($file);
        }
    }
    else {
        header("HTTP/1.0 404 Not Found");
        echo "<h1>Error 404: File Not Found: <br /><em>$file</em></h1>";
    }
?>

उपरोक्त को डाउनलोड के रूप में सहेजें ।

अपने सर्वर पर कहीं भी PHP फ़ाइल के रूप में इस छोटे स्निपेट को सहेजें और आप इसका उपयोग सीधे प्रदर्शन के बजाय ब्राउज़र में फ़ाइल डाउनलोड करने के लिए कर सकते हैं। यदि आप पीडीएफ के अलावा अन्य फ़ाइलों की सेवा करना चाहते हैं, तो पंक्ति 5 को हटा दें या संपादित करें।

आप इसे इस तरह से उपयोग कर सकते हैं:

अपनी HTML फ़ाइल में निम्न लिंक जोड़ें।

<a href="download.php?file=my_pdf_file.pdf">Download the cool PDF.</a>

से संदर्भ: यह ब्लॉग


7
यह आपके सर्वर पर हर एक फ़ाइल की सेवा करने का एक अच्छा तरीका है जो किसी का भी ध्यान दे रहा है। download.php?file=database_password_file.phpउदाहरण के लिए।
पब्र्नी

5

अपनी .htaccessफ़ाइल में बस नीचे दिया गया कोड डालें :

AddType application/octet-stream .csv
AddType application/octet-stream .xls
AddType application/octet-stream .doc
AddType application/octet-stream .avi
AddType application/octet-stream .mpg
AddType application/octet-stream .mov
AddType application/octet-stream .pdf

या आप जावास्क्रिप्ट द्वारा ट्रिक भी कर सकते हैं

element.setAttribute( 'download', whatever_string_you_want);

1
क्या यह वेब सर्वर अपाचे नहीं है ?
पीटर मोर्टेंसन

5

मैंने अभी इसका उपयोग किया है, लेकिन मुझे नहीं पता कि यह सभी ब्राउज़रों में काम करता है या नहीं।

यह फ़ायरफ़ॉक्स में काम करता है:

<a href="myfile.pdf" download>Click to Download</a>

1
यह सुझाव दिया गया है, और अधिक पृष्ठभूमि जानकारी के साथ, पहले के उत्तर में
usr2564301

4

एक वास्तव में आसान तरीका बाहरी डाउनलोड साइटों का उपयोग कर या हेडर को संशोधित करने आदि बस पीडीएफ के अंदर और सीधे लिंक ज़िप फ़ाइल के लिए के साथ ज़िप फ़ाइल बनाने के लिए है बिना इस लक्ष्य को हासिल करने के लिए,। यह हमेशा सेव / ओपन डायलॉग को ट्रिगर करेगा, और अभी भी लोगों के लिए .zip से जुड़े प्रोग्राम को पीडीएफ विंडो को डबल-क्लिक करना आसान है।

BTW महान सवाल है, मैं एक जवाब के रूप में अच्छी तरह से देख रहा था, क्योंकि ज्यादातर ब्राउज़र-एम्बेडेड पीडीएफ प्लग-इन कुछ भी प्रदर्शित करने के लिए लंबे समय तक ले जाते हैं (और पीडीएफ लोड होने के दौरान अक्सर ब्राउज़र लटकाएंगे)।


31
भयानक प्रयोज्यता। कई अंत उपयोगकर्ताओं को पता नहीं होगा कि ज़िप फ़ाइल के साथ क्या करना है।
कोडरायर

1
कभी-कभी सरल सॉलिओयोन सबसे अच्छा समाधान होते हैं!
इलाद्रो

1
एक अच्छा समाधान नहीं। मैं फ़ायरफ़ॉक्स और एक ज़िप फ़ाइल के साथ बिल्कुल यही समस्या है। मुझे क्या करना चाहिए? फ़ाइल को ज़िप करें? उस स्थिति में, HTTP हेडर को संशोधित करना एक समाधान हो सकता है लेकिन मेरी उस तक कोई पहुंच नहीं है।
अरनौद वील

2

सर्वर-साइड समाधान अधिक संगत है, जब तक कि सभी ब्राउज़रों में "डाउनलोड" विशेषता लागू नहीं हो जाती।

एक पायथन उदाहरण एक फ़ाइलस्टोर के लिए एक कस्टम HTTP अनुरोध हैंडलर हो सकता है। फ़िलेस्टर को इंगित करने वाले लिंक इस तरह उत्पन्न होते हैं:

http://www.myfilestore.com/filestore/13/130787e71/download_as/desiredName.pdf

यहाँ कोड है:

class HTTPFilestoreHandler(SimpleHTTPRequestHandler):

    def __init__(self, fs_path, *args):
        self.fs_path = fs_path                          # Filestore path
        SimpleHTTPRequestHandler.__init__(self, *args)

    def send_head(self):
        # Overwrite SimpleHTTPRequestHandler.send_head to force download name
        path = self.path
        get_index = (path == '/')
        self.log_message("path: %s" % path)
        if '/download_as/' in path:
            p_parts = path.split('/download_as/')
            assert len(p_parts) == 2, 'Bad download link:' + path
            path, download_as = p_parts
        path = self.translate_path(path )
        f = None
        if os.path.isdir(path):
            if not self.path.endswith('/'):
                # Redirect browser - doing basically what Apache does
                self.send_response(301)
                self.send_header("Location", self.path + "/")
                self.end_headers()
                return None
            else:
                return self.list_directory(path)
        ctype = self.guess_type(path)
        try:
            f = open(path, 'rb')
        except IOError:
            self.send_error(404, "File not found")
            return None
        self.send_response(200)
        self.send_header("Content-type", ctype)
        fs = os.fstat(f.fileno())
        self.send_header("Expires", '0')
        self.send_header("Last-Modified", self.date_time_string(fs.st_mtime))
        self.send_header("Cache-Control", 'must-revalidate, post-check=0, pre-check=0')
        self.send_header("Content-Transfer-Encoding", 'binary')
        if download_as:
            self.send_header("Content-Disposition", 'attachment; filename="%s"' % download_as)
        self.send_header("Content-Length", str(fs[6]))
        self.send_header("Connection", 'close')
        self.end_headers()
        return f


class HTTPFilestoreServer:

    def __init__(self, fs_path, server_address):
        def handler(*args):
            newHandler = HTTPFilestoreHandler(fs_path, *args)
            newHandler.protocol_version = "HTTP/1.0"
        self.server = BaseHTTPServer.HTTPServer(server_address, handler)

    def serve_forever(self, *args):
        self.server.serve_forever(*args)


def start_server(fs_path, ip_address, port):
    server_address = (ip_address, port)
    httpd = HTTPFilestoreServer(fs_path, server_address)

    sa = httpd.server.socket.getsockname()
    print "Serving HTTP on", sa[0], "port", sa[1], "..."
    httpd.serve_forever()

2

ऐसा करने का एक बहुत आसान तरीका है, अगर आपको अपने पृष्ठ पर एक लिंक के लिए डाउनलोड करने के लिए मजबूर करने की आवश्यकता है, तो एचटीएमएल 5 डाउनलोड-विशेषता का उपयोग href- लिंक में करें।

देखें: http://davidwalsh.name/download-attribute

इसके साथ आप उस फ़ाइल का नाम बदल सकते हैं जिसे उपयोगकर्ता डाउनलोड करेगा और उसी समय यह डाउनलोड को बाध्य करता है।

इस बात पर बहस हुई है कि यह अच्छा अभ्यास है या नहीं, लेकिन मेरे मामले में मेरे पास एक पीडीएफ फाइल के लिए एक एम्बेडेड दर्शक है और दर्शक एक डाउनलोड लिंक की पेशकश नहीं करता है, इसलिए मुझे अलग से एक प्रदान करना होगा। यहां मैं यह सुनिश्चित करना चाहता हूं कि उपयोगकर्ता वेब ब्राउज़र में पीडीएफ नहीं खोले, जो भ्रामक होगा।

यह आवश्यक नहीं है कि सेव-डायलॉग को ओपन करें, लेकिन लिंक को प्रीसेट डाउनलोड डेस्टिनेशन पर सीधे डाउनलोड कर देगा। और निश्चित रूप से यदि आप किसी और के लिए एक साइट कर रहे हैं, और उन्हें अपने लिंक में मैन्युअल रूप से लिखने की आवश्यकता है तो शायद यह एक बुरा विचार है, लेकिन अगर लिंक में विशेषता प्राप्त करने का तरीका है, तो यह एक हल्का समाधान हो सकता है।


1

यह पुराना पोस्ट है, लेकिन यहां जावास्क्रिप्ट में मेरा एक समाधान है जो jQuery लाइब्रेरी का उपयोग कर रहा है।

<script>
(function($){
    var download = [];
    $('a.force-download, .force-download a').each(function(){
        // Collect info
        var $this = $(this),
            $href = $this.attr('href'),
            $split = $href.split('/'),
            $name = document.title.replace(/[\W_]/gi, '-').replace(/-{2,}/g, '-'); // get title and clean it for the URL

        // Get filename from URL
        if($split[($split.length-1)])
        {
            $tmp = $split[($split.length-1)];
            $tmp = $tmp.split('.');
            $name = $tmp[0].replace(/[\W_]/gi, '-').replace(/-{2,}/g, '-');
        }

        // If name already exists, put timestamp there
        if($.inArray($name, download) > -1)
        {
            $name = $name + '-' + Date.now().replace(/[\W]/gi, '-');
        }

        $(this).attr("download", $name);
        download.push($name);
    });
}(jQuery || window.jQuery))
</script>

आपको बस force-downloadअपने <a>टैग के अंदर वर्ग का उपयोग करने की आवश्यकता है और स्वचालित डाउनलोड को मजबूर करेगा। आप इसे अभिभावक से भी जोड़ सकते हैं divऔर इसके अंदर के सभी लिंक पिक करेंगे।

उदाहरण:

<a href="/some/good/url/Post-Injection_Post-Surgery_Instructions.pdf" class="force-download" target="_blank">Download PDF</a>

यह वर्डप्रेस और किसी भी अन्य सिस्टम या कस्टम वेबसाइट के लिए बहुत अच्छा है।


0

HTML कोड में फ़ाइल नाम के बाद मैं जोड़ता हूं ?forcedownload=1

यह मेरे लिए संवाद बॉक्स को सहेजने या डाउनलोड करने के लिए ट्रिगर करने का सबसे सरल तरीका है।


0

यदि आपके पास ब्राउज़र के भीतर एक प्लगइन है जो जानता है कि पीडीएफ फाइल कैसे खोलें तो यह सीधे खुल जाएगा। जैसे छवियों और HTML सामग्री के मामले में।

इसलिए वैकल्पिक दृष्टिकोण प्रतिक्रिया में अपने MIME प्रकार को भेजने के लिए नहीं है। इस तरह से ब्राउज़र को कभी नहीं पता चलेगा कि किस प्लगइन को इसे खोलना चाहिए। इसलिए यह आपको एक सेव / ओपन डायलॉग बॉक्स देगा।


यह हासिल करना मुश्किल है क्योंकि यह सर्वर है जो माइम प्रकार भेजता है और जब सीधे एक पीडीएफ फाइल से लिंक होता है, तो आप हेडर नहीं बदल सकते।
कारेल पेट्रानेक

0

मुझे बस एक बहुत ही समस्या थी कि मुझे एक जिप फाइल के अंदर फाइल के डाउनलोड लिंक बनाने की जरूरत थी।

मैंने पहले एक अस्थायी फ़ाइल बनाने की कोशिश की, फिर अस्थायी फ़ाइल के लिए एक लिंक प्रदान किया, लेकिन मैंने पाया कि कुछ ब्राउज़र केवल डाउनलोड करने की पेशकश के बजाय सामग्री (एक सीएसवी एक्सेल फ़ाइल) प्रदर्शित करेंगे। आखिरकार मुझे एक सर्वलेट का उपयोग करके समाधान मिला। यह टॉमकैट और ग्लासफिश दोनों पर काम करता है, और मैंने इसे इंटरनेट एक्सप्लोरर 10 और क्रोम पर आजमाया।

सर्वलेट ज़िप फ़ाइल के लिए एक पूर्ण पथ नाम के रूप में लेता है, और ज़िप के अंदर फ़ाइल का नाम जिसे डाउनलोड किया जाना चाहिए।

मेरी JSP फ़ाइल के अंदर मेरे पास ज़िप के अंदर की सभी फाइलों को प्रदर्शित करने वाली एक कड़ी है, जिसमें लिंक हैं: onclick='download?zip=<%=zip%>&csv=<%=csv%>'

सर्वलेट कोड download.java में है:

package myServlet;

import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
import java.util.zip.*;
import java.util.*;

// Extend HttpServlet class
public class download extends HttpServlet {

    public void doGet(HttpServletRequest request, HttpServletResponse response)
        throws ServletException, IOException
    {
        PrintWriter out = response.getWriter(); // now we can write to the client

        String filename = request.getParameter("csv");
        String zipfile = request.getParameter("zip");

        String aLine = "";

        response.setContentType("application/x-download");
        response.setHeader( "Content-Disposition", "attachment; filename=" + filename); // Force 'save-as'
        ZipFile zip = new ZipFile(zipfile);
        for (Enumeration e = zip.entries(); e.hasMoreElements();) {
            ZipEntry entry = (ZipEntry) e.nextElement();
            if(entry.toString().equals(filename)) {
                InputStream is = zip.getInputStream(entry);
                BufferedReader br = new BufferedReader(new InputStreamReader(is, "UTF-8"), 65536);
                while ((aLine = br.readLine()) != null) {
                    out.println(aLine);
                }
                is.close();
                break;
            }
        }
    }
}

टॉमकैट पर संकलित करने के लिए आपको टंकपट \ lib \ servlet-api.jar या GlassFish: ग्लासफ़िश \ lib \ j2ee.jar को शामिल करने के लिए क्लासपैथ की आवश्यकता है

लेकिन दोनों में से कोई एक काम करेगा। आपको अपना सर्वलेट भी सेट करना होगा web.xml


0

एक प्रतिक्रिया शीर्ष लेख जोड़ें सामग्री-विवाद: लगाव; फ़ाइल नाम के बाद। मेटा कंटेंट-डिस्पोज़ हटाएं; इनलाइन; जो एक ही विंडो में डॉक्यूमेंट खोलेगा

जावा में इसे सेट किया गया है

response.setHeader("Content-Disposition", "attachment;filename=test.jpg");

-2

बड़ी पीडीएफ फाइलों के साथ ब्राउजर हैंग हो जाता है। मोज़िला में, मेनू टूल्सविकल्पएप्लिकेशन , फिर सामग्री प्रकार एडोब एक्रोबैट दस्तावेज़ के बगल में। एक्शन ड्रॉप डाउन में, हमेशा पूछें चुनें ।

यह मेरे लिए काम नहीं करता था, इसलिए जो काम किया गया था:

मेनू उपकरण * → ऐड-ऑनएडोब एक्रोबैट (फ़ायरफ़ॉक्स के लिए एडोब पीडीएफ प्लगइन) → अक्षम। अब मैं ई-बुक्स डाउनलोड करने में सक्षम हूं!


2
क्या आपने प्रश्न पढ़ा है? यह एक क्रॉस ब्राउज़र का उत्तर नहीं है
मार्क

1
@ यह एक वेबसाइट के मालिक नहीं, पीडीएफ के जबरन डाउनलोड को रोकने के लिए एक उपयोगकर्ता के लिए निर्देश भी है।
नाथन हॉर्बी
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.