क्या डेटा का उपयोग करते समय किसी सुझाए गए फ़ाइलनाम को निर्दिष्ट करने का कोई तरीका है: URI?


225

यदि उदाहरण के लिए आप लिंक का अनुसरण करते हैं:

data:application/octet-stream;base64,SGVsbG8=

ब्राउज़र आपको हाइपरलिंक में बेस 64 के रूप में रखे गए डेटा से मिलकर एक फाइल डाउनलोड करने के लिए प्रेरित करेगा। क्या मार्कअप में डिफ़ॉल्ट नाम सुझाने का कोई तरीका है? यदि नहीं, तो क्या जावास्क्रिप्ट समाधान है?


शायद इस मुद्दे से असंबंधित है, लेकिन मेरा सुझाव है कि अगर यह एक सर्वर या पुराने ब्राउज़र बाधा नहीं है तो ब्लॉब & URL.createObjectURL का उपयोग कर रहा है
अंतहीन

3
: कुछ ब्राउज़र MediaType के वैकल्पिक पैरामीटर "नाम" का समर्थनdata:application/pdf;name=document.pdf;base64,BASE64_DATA_ENCODED
एमईएमएस

मैं फ़ायरफ़ॉक्स pdf.js के साथ मुद्दा था जो कुछ मामलों में लटका करने के लिए जाता है अगर यह डेटा uri से फ़ाइल नाम नहीं निकाल सकता है। देखें stackoverflow.com/questions/45585921/…
बर्नहार्ड

@ मीम्स कौन से ब्राउज़र "नाम" पैरामीटर का समर्थन करते हैं? क्या आप मुझे कुछ संदर्भ प्रलेखन की ओर इशारा कर सकते हैं? (मेरा google-fu ने मुझे विफल कर दिया है)।
TheAddonDepot

@DimuDesigns उस समय कम से कम फ़ायरफ़ॉक्स था। ऐसा लग रहा है कि अब ऐसा नहीं है। यह MIME सामग्री-प्रकार (! = सामग्री-विवाद) "नाम" पैरामीटर (RFC में नहीं?) से संबंधित है
मेम्स

जवाबों:


158

downloadविशेषता का उपयोग करें :

<a download='FileName' href='your_url'>

Html5-demos.appspot.com / ... पर लाइव उदाहरण ।

वर्तमान में क्रोम, फ़ायरफ़ॉक्स, एज, ओपेरा और डेस्कटॉप सफारी पर काम करता है लेकिन iOS सफारी या IE11 पर नहीं।


3
@BioDesign: यह डेटा के साथ भी काम करता है: URI's इन क्रोम। देखें: jsfiddle.net/pYpqW
सेंसफुल

6
लेकिन आप ऐसा नहीं कर सकते window.location.replace। यदि आप उदाहरण के लिए एक डेटा बनाना चाहते हैं: uri या एक जनरेट किया गया window.URL.createObjectURL, और उस फ़ाइल के रूप में डाउनलोड करें, तो आपको एक <a> बनाना होगा और उसे क्लिक करना होगा: jsfiddle.net/flyingsheep/wpQtH (नहीं, $(...).click()काम नहीं करता)
उड़ान भेड़

1
सिर्फ अगर सभी ब्राउज़र क्रोम की तरह थे ... [विलाप]
स्ट्रीट लाइट

6
@flyingsheep $('<a href="data:text/plain,Test" download="test.txt">')[0].click()यहाँ ठीक काम करता है (Chrome 23) (ध्यान दें: मैंने मूल clickविधि का उपयोग किया था , jQuery के एक नहीं)। डेमो: jsfiddle.net/2zsRW
रॉब डब्ल्यू

1
@flyingsheep लगता है कि वे फ़ायरफ़ॉक्स में एक ही-मूल नीति लागू कर रहे हैं "फ़ायरफ़ॉक्स 20 में यह विशेषता केवल उसी-मूल के साथ संसाधनों के लिंक के लिए सम्मानित है।" developer.mozilla.org/en-US/docs/Web/HTML/Element/a मेरे परीक्षण में, Chrome की यह सीमा नहीं है।
विलियम डेनिस

62

क्रोम इन दिनों इसे बहुत सरल बनाता है:

function saveContent(fileContents, fileName)
{
    var link = document.createElement('a');
    link.download = fileName;
    link.href = 'data:,' + fileContents;
    link.click();
}

Idk ये सभी अन्य जवाब क्या बात कर रहे हैं, इस पर पहले 30 क्रोम में काम किया।
माइकल जे। कैलकिंस

2
यह अब है, लेकिन यह हमेशा इतना आसान नहीं था। इनमें से कई जवाब सालों पहले के हैं। और वे अन्य ब्राउज़रों के लिए भी काम करते हैं।
होल्फ

7
ब्राउज़र संगतता की पूरी सूची के लिए http://caniuse.com/#feat=download का संदर्भ लें ।
tixastronauta

2
@tixastronauta: उस पेज में जानकारी के बावजूद, मेरे फ़ायरफ़ॉक्स में काम नहीं करने के लिए 44. क्रोम में अच्छी तरह से काम करना। 48
लुइस ए फ्लोरिट

हाय @Holf वहाँ भी फ़ाइल प्रकार या विस्तार या इसके बस के रूप में सरल रूप में इसे फ़ाइल नाम के रूप में जोड़ने का एक तरीका है?
फ्राकियर

51

HTML केवल:download विशेषता का उपयोग करें :

<a download="logo.gif" href="data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7">Download transparent png</a>


केवल जावास्क्रिप्ट: आप इस कोड के साथ किसी भी डेटा URI को बचा सकते हैं:

function saveAs(uri, filename) {
  var link = document.createElement('a');
  if (typeof link.download === 'string') {
    link.href = uri;
    link.download = filename;

    //Firefox requires the link to be in the body
    document.body.appendChild(link);
    
    //simulate click
    link.click();

    //remove the link when done
    document.body.removeChild(link);
  } else {
    window.open(uri);
  }
}

var file = 'data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7'
saveAs(file, 'logo.gif');

क्रोम, फ़ायरफ़ॉक्स और एज 13+ निर्दिष्ट फ़ाइल नाम का उपयोग करेगा।

IE11, Edge 12, और Safari 9 (जो विशेषता का समर्थन नहीं करते हैंdownload ) फ़ाइल को उनके डिफ़ॉल्ट नाम के साथ डाउनलोड करेंगे या वे बस इसे एक नए टैब में प्रदर्शित करेंगे , यदि यह समर्थित फ़ाइल प्रकार का है: चित्र, वीडियो, ऑडियो फ़ाइलें ,…


दोनों डेमो क्रोम ३ (में मेरे लिए ठीक काम करते हैं (लेकिन उन्हें क्रोम १४+ में काम करना चाहिए)
work

एक और पूर्ण समाधान के लिए, मैं downloadjs
npm

यह मेरे लिए काम करता है लेकिन ब्राउज़र पृष्ठ उसके बाद ताज़ा हो जाता है। आश्चर्य है कि कैसे को रोकने के लिए?

1
फ़ाइल आकार के लिए क्रोम में काम नहीं करता> 2 एमबी क्रोम द्वारा प्रतिबंध की वजह से stackoverflow.com/questions/695151/...
प्रणव सिंह

सीमा data:यूआरआई की है, जो कि प्रश्न का उल्लेख करता है। यह उत्तर
ब्लब्स के

40

RFC 2397 के अनुसार , नहीं, वहाँ नहीं है।

और न ही उस तत्व की कोई विशेषता दिखाई देती <a>है जिसका आप उपयोग कर सकते हैं।

हालांकि एचटीएमएल 5 ने बाद downloadमें <a>तत्व पर विशेषता पेश की है , हालांकि लेखन समर्थन के समय सार्वभौमिक नहीं है (उदाहरण के लिए कोई एमएसआईई समर्थन नहीं)


9
दूसरा वाक्य लेखन के समय सही था, लेकिन अब नहीं है । हालांकि, यह अभी तक व्यापक रूप से लागू नहीं हुआ है, हालांकि।
उड़ान भेड़

अधिक जानकारी के लिए यह टिप्पणी देखें :)
उड़ान भेड़

@flyingsheep, यह है व्यापक रूप से लागू।
पचेरियर

1
यह 3 साल पहले नहीं था जब मैंने उस टिप्पणी को लिखा था
उड़ान भेड़

यदि फ़ाइल इतनी लंबी है कि डाउनलोड विफल रहता है
deFreitas

21

मैंने netwerk / प्रोटोकॉल / डेटा / nsDataHandler.cpp में फ़ायरफ़ॉक्स स्रोतों में थोड़ा सा देखा है

डेटा हैंडलर केवल सामग्री / प्रकार और चार्ट को पार्स करता है, और लगता है कि स्ट्रिंग में "; बेस 64" है

rfc कोई फ़ाइल नाम निर्दिष्ट नहीं करता है और कम से कम फ़ायरफ़ॉक्स इसके लिए कोई फ़ाइल नाम नहीं संभालता है, कोड एक यादृच्छिक नाम प्लस ".part" उत्पन्न करता है।

मैंने फ़ायरफ़ॉक्स लॉग भी चेक किया है

[b2e140]: DOCSHELL 6e5ae00 InternalLoad data:application/octet-stream;base64,SGVsbG8=
[b2e140]: Found extension '' (filename is '', handling attachment: 0)
[b2e140]: HelperAppService::DoContent: mime 'application/octet-stream', extension ''
[b2e140]: Getting mimeinfo from type 'application/octet-stream' ext ''
[b2e140]: Extension lookup on '' found: 0x0
[b2e140]: Ext. lookup for '' found 0x0
[b2e140]: OS gave back 0x43609a0 - found: 0
[b2e140]: Searched extras (by type), rv 0x80004005
[b2e140]: MIME Info Summary: Type 'application/octet-stream', Primary Ext ''
[b2e140]: Type/Ext lookup found 0x43609a0

दिलचस्प फ़ाइलें यदि आप मोज़िला स्रोतों को देखना चाहते हैं:

data uri handler: netwerk/protocol/data/nsDataHandler.cpp
where mozilla decides the filename: uriloader/exthandler/nsExternalHelperAppService.cpp
InternalLoad string in the log: docshell/base/nsDocShell.cpp

मुझे लगता है कि आप अभी के लिए एक समाधान खोजना बंद कर सकते हैं, क्योंकि मुझे संदेह है कि कोई भी नहीं है :)

जैसा कि इस थ्रेड एचटीएमएल 5 में देखा गया है कि इसमें downloadविशेषता है, यह फ़ायरफ़ॉक्स 20 पर भी काम करता है । http://www.whatwg.org/specs/web-apps/current-work/multipage/links.html#attr-hyperlink-download


3
ठंडा! हालाँकि मैं जरूरी नहीं मानता कि फ़ायरफ़ॉक्स जो मौजूद है उस पर अंतिम अधिकार है। :)
ग्लेनो

14

निम्न जावास्क्रिप्ट स्निपेट लिंक की नई 'डाउनलोड' विशेषता का उपयोग करके और एक क्लिक का अनुकरण करके काम करता है।

function downloadWithName(uri, name) {
  var link = document.createElement("a");
  link.download = name;
  link.href = uri;
  link.click();
}

और निम्नलिखित उदाहरण से पता चलता है कि यह उपयोग है:

downloadWithName("data:,Hello%2C%20World!", "helloWorld.txt")

1
यह फ़ायरफ़ॉक्स में काम नहीं करता है, मैंने Fx संगतता के साथ नीचे एक विस्तारित उत्तर जोड़ा।

12

नहीं।

संपूर्ण उद्देश्य यह है कि यह एक डेटास्ट्रीम है, न कि फ़ाइल। डेटा स्रोत को फ़ाइल के रूप में इसे संभालने वाले उपयोगकर्ता एजेंट का कोई ज्ञान नहीं होना चाहिए ... और यह नहीं है।


6
इसका उद्देश्य URL स्वरूप में आंतरिक डेटा के data:एक ब्लॉक को किसी प्रोटोकॉल-आधारित स्रोत से पढ़े बिना फ़्यूज़ करना है । @ Silex के उत्तर के लिंक से पता चलता है कि इसे लिखने के लिए पसंदीदा नाम सुझाने की क्षमता उपयोगी मानी जाती है, भले ही इसे अभी तक लागू नहीं किया गया हो।
अलनीतक

1
@ अलनीतक: उपयोगी है? पूर्ण रूप से। तकनीकी रूप से उचित है? फिर भी आश्वस्त नहीं हुए। :)
में ऑर्बिट

3
@ टोमलाक डेटा लोड करने और इसे बचाने के बीच के अंतर पर विचार करता है - सिर्फ इसलिए कि एक बूँद एक डेटा में इनलाइन इनकोडेड है: URL का मतलब यह नहीं है कि इसे सहेजने के लिए एक पसंदीदा नाम नहीं होना चाहिए।
अलनीतक

4
लेकिन इसके "पूरे उद्देश्य" के बारे में आपकी लाइन गलत है। data:विशेष रूप से एक छोटी -सी यूआरएल प्रारूप में प्रदर्शित करने के लिए (छोटी) इनलाइन सामग्री को अनुमति देने के लिए आविष्कार किया गया था ताकि इसे अलग HTTP अनुरोध के बिना छवि टैग जैसी चीजों द्वारा उपयोग किया जा सके। HTML का कहना है कि एक img srcविशेषता की सामग्री एक URL होनी चाहिए, इसीलिए RFC 2397 ने इसे बनाया। कोई "डेटा स्रोत" नहीं है।
अलनीतक

6
@ अलनीतक: बिल्कुल। कोई डेटा स्रोत नहीं है। कोई संदर्भ नहीं है। यूआरआई है डेटा।
परिक्रमा

9

आप एंकर तत्व में एक डाउनलोड विशेषता जोड़ सकते हैं।

नमूना:

<a download="abcd.cer"
    href="data:application/stream;base64,MIIDhTC......">down</a>

5

इस लिंक को देखें: http://lists.w3.org/Archives/Public/uri/2010Feb/0069.html

उद्धरण:

यह भी काम करता है (के रूप में, एक समस्या का कारण नहीं है)
, इस तरह से अंत में base64 (ओपेरा में कम से कम):

डेटा: पाठ / सादे; charset = utf-8; हेडर = सामग्री-विन्यास% 3A% 20attachment% 3 बी% 20filename% 3 डी% 22with% 20spaces.txt% 22% 0 d% 0AContent-भाषा% 3A% 20en; base64,4oiaDQo% 3 डी

चर्चा के बाकी संदेशों में भी कुछ जानकारी है।


दुर्भाग्य से यह डाउनलोड नहीं होता है।
जेम्स ख्योरी

7
यह चर्चा डेटा URI प्रारूप के प्रस्तावित विस्तार के लिए थी - इसे लागू नहीं किया गया है।
अलनीतक

लागू या नहीं, मनमाने मापदंडों के लिए मौजूदा समर्थन के साथ यह एक महान होगा।
डेन लैग

5

सेवा कर्मचारियों का उपयोग करना , यह अंत में सबसे कठिन अर्थों में संभव है।

  1. एक नकली URL बनाएँ। उदाहरण के लिए / saveAs/myPrettyName.jpg
  2. URL का उपयोग करें <a href, <img src, window.open (url), बिल्कुल कुछ भी जो "वास्तविक" URL के साथ किया जा सकता है।
  3. कार्यकर्ता के अंदर, भ्रूण घटना को पकड़ें, और सही डेटा के साथ जवाब दें।

ब्राउज़र अब myPrettyName.jpg का सुझाव देगा, भले ही उपयोगकर्ता किसी नए टैब में फ़ाइल को खोलता है, और उसे वहां सहेजने का प्रयास करता है। यह बिल्कुल वैसा ही होगा जैसे कि फाइल सर्वर से आई थी।

// In the service worker
self.addEventListener( 'fetch', function(e)
{
    if( e.request.url.startsWith( '/blobUri/' ) )
    {
        // Logic to select correct dataUri, and return it as a Response
        e.respondWith( dataURLAsRequest );
    }
});

1
दिलचस्प! समर्थन अब के लिए काफी उथला लगता है, हालांकि: caniuse.com/#feat=serviceworkers
tuomassalo

क्या किसी फ़ाइल के दूसरे डायरेक्ट यूआरएल के साथ "जवाब" देने का कोई तरीका है?
इयूलियन ओनोफ्रेई

4

Google कोड पर एक छोटा सा समाधान स्क्रिप्ट है जो मेरे लिए काम करता है:

http://code.google.com/p/download-data-uri/

यह इसमें डेटा के साथ एक फॉर्म जोड़ता है, इसे सबमिट करता है और फिर फॉर्म को हटा देता है। हैकी, लेकिन यह मेरे लिए काम किया। JQuery की आवश्यकता है।

यह धागा Google कोड पृष्ठ से पहले Google में दिखाया गया था और मुझे लगा कि यह लिंक यहां भी उपयोगी हो सकता है।


दिलचस्प स्क्रिप्ट, लेकिन यह सर्वर की आवश्यकता है प्रतिक्रिया प्राप्त करने के लिए इसे सही वापस भेजें? jsfiddle.net/hZySf
जेम्स खुरेई

मुझे यकीन नहीं है कि फ़ाइल कहाँ से उत्पन्न हो रही है .. क्या यह फ़ाइल बेस 64 एनकोड में संग्रहीत की जा रही है? (मैं बेस 64 से बहुत परिचित नहीं हूं)
स्ट्रीटलाइट

@streetlight: "फ़ाइल" (अर्थात डेटा) जावास्क्रिप्ट द्वारा उत्पन्न होती है। उस परियोजना का संदर्भ (और शायद यहां सबसे अधिक) यह मान लेता है कि आपके पास जेएस चर में अपना वांछित डेटा प्राप्त करने का कोई तरीका है। अंतर यह है कि इसे data:...यूआरआई के माध्यम से उपयोगकर्ता के सामने प्रस्तुत करने के बजाय , यह स्क्रिप्ट सर्वर पर इसे पोस्ट करने के लिए एक रूप बनाता है। और सर्वर तब संभवतः इसे सीधे HTTP "डाउनलोड" प्रतिक्रिया (यानी एक उपयुक्त सामग्री-विवाद हेडर के साथ फ़ाइल नाम निर्दिष्ट) के रूप में वापस गूँजता है।
आंद्रेज डॉयल

4

यहाँ Holf के संस्करण पर आधारित एक jQuery संस्करण है और क्रोम और फ़ायरफ़ॉक्स के साथ काम करता है जबकि उसका संस्करण केवल Chrome के साथ काम करता है। ऐसा करने के लिए शरीर में कुछ जोड़ना थोड़ा अजीब है, लेकिन अगर किसी के पास बेहतर विकल्प है तो मैं इसके लिए तैयार हूं।

var exportFileName = "export-" + filename;
$('<a></a>', {
    "download": exportFileName,
    "href": "data:," + JSON.stringify(exportData, null,5),
    "id": "exportDataID"
}).appendTo("body")[0].click().remove();

1
JQuery 1.11 के साथ .remove () के कारण मुझे एक अपवाद मिलता है। मैं इसके चारों ओर $().appendTo()एक चर को असाइन करके मिलाvariable.click(); variable.remove()
p0lar_bear

@ p0lar_bear आपको किसी भी jQuery के साथ उस अपवाद को प्राप्त करना चाहिए, क्योंकि [0]किसी भी "jQuery तत्व" से प्राप्त होने पर पहले DOM तत्व का प्रतिनिधित्व करना चाहिए, जो अनिवार्य रूप से आपको "jQuery" से बाहर ले जाता है।
drzaus

आपको वास्तव में तत्व को जोड़ने / हटाने की आवश्यकता नहीं है - stackoverflow.com/a/17311705/1037948
drzaus

3

यह हैकिश की तरह है, लेकिन मैं पहले भी उसी स्थिति में रहा हूं। मैं गतिशील रूप से जावास्क्रिप्ट में एक पाठ फ़ाइल उत्पन्न कर रहा था और इसे डेटा-यूआरआई के साथ एन्कोडिंग द्वारा डाउनलोड के लिए प्रदान करना चाहता था।

यह मामूली प्रमुख उपयोगकर्ता के हस्तक्षेप से संभव है । एक लिंक उत्पन्न करें <a href="data:...">right-click me and select "Save Link As..." and save as "example.txt"</a>। जैसा कि मैंने कहा, यह अयोग्य है, लेकिन यह काम करता है यदि आपको पेशेवर समाधान की आवश्यकता नहीं है।

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


यह कोई समाधान नहीं है और यह नहीं मिलता है कि क्या मांगा गया था। माफ़ करना।
21

7
लोल @ "मामूली उपयोगकर्ता हस्तक्षेप"। उपयोगकर्ता को आपके लिए पूरी चीज प्राप्त करना "मामूली उपयोगकर्ता हस्तक्षेप" नहीं है।
ऑर्बिट

उत्पन्न लिंक को ट्रिगर करने के लिए इसे stackoverflow.com/questions/17311645/… के साथ मिलाएं और आपको उपयोगकर्ता के हस्तक्षेप की आवश्यकता नहीं है। आप नाम सुझाने के लिए HTML5 downloadविशेषता निर्दिष्ट कर सकते हैं जैसा कि कई अन्य उत्तरों द्वारा उल्लेख किया गया है
drzaus

यह सफ़ारी के लिए एक बढ़िया समाधान है। डाउनलोड विशेषता समर्थित नहीं है और लिंक पाठ को अद्यतन करने के लिए यह पता लगाने के लिए मॉडर्निज़र का उपयोग करें!
littledynamo

2

यह फ़ायरफ़ॉक्स 43.0 (पुराने परीक्षण नहीं) के साथ काम करता है:

dl.js:

function download() {
  var msg="Hello world!";
  var blob = new File([msg], "hello.bin", {"type": "application/octet-stream"});

  var a = document.createElement("a");
  a.href = URL.createObjectURL(blob);

  window.location.href=a;
}

dl.html

<html lang="en" xmlns="http://www.w3.org/1999/xhtml">

<head>
    <meta charset="utf-8"/>
    <title>Test</title>
    <script type="text/javascript" src="dl.js"></script>
</head>

<body>
<button id="create" type="button" onclick="download();">Download</button>
</body>
</html>

यदि बटन पर क्लिक किया जाता है तो यह डाउनलोड के लिए hello.bin नामक एक फ़ाइल की पेशकश करता है । ट्रिक को Blob के बजाय File का उपयोग करना है ।

संदर्भ: https://developer.mozilla.org/de/docs/Web/API/File


0
var isIE = /*@cc_on!@*/false || !!document.documentMode; // At least IE6
var sessionId ='\n';
var token = '\n';
var caseId = CaseIDNumber + '\n';
var url = casewebUrl+'\n';
var uri = sessionId + token + caseId + url;//data in file
var fileName = "file.i4cvf";// any file name with any extension
if (isIE)
    {
            var fileData = ['\ufeff' + uri];
            var blobObject = new Blob(fileData);
            window.navigator.msSaveOrOpenBlob(blobObject, fileName);
    }
    else //chrome
    {
        window.requestFileSystem = window.requestFileSystem || window.webkitRequestFileSystem;
         window.requestFileSystem(window.TEMPORARY, 1024 * 1024, function (fs) {
            fs.root.getFile(fileName, { create: true }, function (fileEntry) { 
                fileEntry.createWriter(function (fileWriter) {
                    var fileData = ['\ufeff' + uri];
                    var blob = new Blob(fileData);
                    fileWriter.addEventListener("writeend", function () {
                        var fileUrl = fileEntry.toURL();
                        var link = document.createElement('a');
                        link.href = fileUrl;
                        link.download = fileName;
                        document.body.appendChild(link);
                        link.click();
                        document.body.removeChild(link);
                    }, false);
                    fileWriter.write(blob);
                }, function () { });
            }, function () { });
         }, function () { });
    }

1
pls अपने उत्तर में और अधिक विस्तृत विवरण जोड़ें - stackoverflow.com/help/how-to-answer
सेबस्टियन ब्रोच

1
यह उत्तर कचरा है
जोनाथन टेलर

-2

आप वास्तव में इसे क्रोम और फायरफॉक्स में प्राप्त कर सकते हैं।

निम्नलिखित url का प्रयास करें, यह उस कोड को डाउनलोड करेगा जिसका उपयोग किया गया था।

data:text/html;base64,PGEgaHJlZj0iZGF0YTp0ZXh0L2h0bWw7YmFzZTY0LFBHRWdhSEpsWmowaVVGVlVYMFJCVkVGZlZWSkpYMGhGVWtVaUlHUnZkMjVzYjJGa1BTSjBaWE4wTG1oMGJXd2lQZ284YzJOeWFYQjBQZ3BrYjJOMWJXVnVkQzV4ZFdWeWVWTmxiR1ZqZEc5eUtDZGhKeWt1WTJ4cFkyc29LVHNLUEM5elkzSnBjSFErIiBkb3dubG9hZD0idGVzdC5odG1sIj4KPHNjcmlwdD4KZG9jdW1lbnQucXVlcnlTZWxlY3RvcignYScpLmNsaWNrKCk7Cjwvc2NyaXB0Pg==
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.