มีวิธีใดบ้างในการระบุชื่อไฟล์ที่แนะนำเมื่อใช้ data: URI?


225

ถ้าเช่นคุณไปตามลิงค์:

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

เบราว์เซอร์จะแจ้งให้คุณดาวน์โหลดไฟล์ที่ประกอบด้วยข้อมูลที่เก็บไว้เป็น base64 ในไฮเปอร์ลิงก์นั้น มีวิธีการแนะนำชื่อเริ่มต้นในมาร์กอัปหรือไม่? ถ้าไม่เป็นเช่นนั้นมีวิธีแก้ไข JavaScript หรือไม่


อาจไม่เกี่ยวข้องกับปัญหานี้ แต่ฉันขอแนะนำให้ใช้ & URL ของ blob.createObjectURL ถ้านี่ไม่ใช่เซิร์ฟเวอร์หรือสิ่งกีดขวางเบราว์เซอร์เก่า
Endless

3
เบราว์เซอร์บางตัวสนับสนุน "ชื่อ" พารามิเตอร์ทางเลือกของ mediatype:data:application/pdf;name=document.pdf;base64,BASE64_DATA_ENCODED
mems

ฉันมีปัญหากับ Firefox pdf.js ซึ่งมีแนวโน้มที่จะแขวนในบางกรณีหากไม่สามารถแยกชื่อไฟล์จาก data uri ดูstackoverflow.com/questions/45585921/…
Bernhard

@mems เบราว์เซอร์ใดบ้างที่สนับสนุนพารามิเตอร์ "name" คุณช่วยชี้ฉันไปที่เอกสารอ้างอิงบางส่วนได้หรือไม่? (google-fu ของฉันทำให้ฉันล้มเหลว)
TheAddonDepot

@DimuDesigns อย่างน้อย Firefox ในเวลานั้น ดูเหมือนว่าไม่ใช่กรณีอีกต่อไป มันเกี่ยวข้องกับ MIME Content-Type (! = เนื้อหาการจัดการเนื้อหา) "ชื่อ" พารามิเตอร์ (ไม่ได้อยู่ใน RFC?)
mems

คำตอบ:


158

ใช้downloadคุณลักษณะ:

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

ตัวอย่างเช่นอยู่บนhtml5-demos.appspot.com / ...

ปัจจุบันสามารถใช้งานได้กับ Chrome, Firefox, Edge, Opera และ desktop Safari แต่ไม่ใช่ iOS Safari หรือ IE11


3
@BioDesign: มันทำงานได้กับข้อมูล: URI อยู่ในโครเมียม ดู: jsfiddle.net/pYpqW
Senseful

6
window.location.replaceแต่คุณไม่สามารถทำมันได้ด้วย หากคุณต้องการสร้างข้อมูล: uri หรือสิ่งที่สร้างโดยwindow.URL.createObjectURLและดาวน์โหลดเป็นไฟล์คุณจะต้องสร้าง <a> แล้วคลิกมัน: jsfiddle.net/flyingsheep/wpQtH ( $(...).click()ไม่ไม่ทำงาน)
บินแกะ

1
เฉพาะในกรณีที่เบราว์เซอร์ทั้งหมดเป็นเช่น Chrome ... [ถอนหายใจ]
streetlight

6
@flyingsheep $('<a href="data:text/plain,Test" download="test.txt">')[0].click()ดูเหมือนว่าจะทำงานได้ดีที่นี่ (Chrome 23) (หมายเหตุ: ฉันใช้clickวิธีการดั้งเดิมไม่ใช่ jQuery) ตัวอย่าง: jsfiddle.net/2zsRW
Rob W

1
@flyingsheep ดูเหมือนว่าพวกเขากำลังบังคับใช้นโยบายกำเนิดเดียวกันใน Firefox "ใน Firefox 20 คุณลักษณะนี้ได้รับการยกย่องสำหรับลิงก์ไปยังแหล่งข้อมูลที่มีแหล่งกำเนิดเดียวกันเท่านั้น" developer.mozilla.org/en-US/docs/Web/HTML/Element/aในการทดสอบของฉัน Chrome ไม่มีข้อ จำกัด นี้
William Denniss

62

Chrome ทำให้วันนี้ง่ายมาก:

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

Idk สิ่งที่คำตอบอื่น ๆ เหล่านี้กำลังพูดถึงเกี่ยวกับสิ่งนี้ได้ผลในการลองครั้งแรกใน Chrome 30
Michael J. Calkins

2
มันทำตอนนี้ แต่มันก็ไม่ง่ายเสมอไป หลายคำตอบเหล่านี้มาจากหลายปีที่ผ่านมา และมันก็ใช้ได้กับเบราว์เซอร์อื่นด้วย
Holf

7
อ้างถึงhttp://caniuse.com/#feat=downloadสำหรับรายการความเข้ากันได้ของเบราว์เซอร์ทั้งหมด
tixastronauta

2
@tixastronauta: แม้จะมีข้อมูลในหน้านั้นไม่ได้ทำงานใน firefox ของฉัน 44. ทำงานได้ดีใน Chrome 48
Luis A. Florit

สวัสดี @ ฮอลล์มีวิธีในการเพิ่มประเภทไฟล์หรือส่วนขยายหรือเพียงแค่เรียบง่ายเหมือน spceficy มันเป็นชื่อไฟล์?
Fraccier

51

HTML เท่านั้น:ใช้downloadคุณลักษณะ:

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


Javascript เท่านั้น:คุณสามารถบันทึก 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');

Chrome, Firefox และ Edge 13+จะใช้ชื่อไฟล์ที่ระบุ

IE11, Edge 12 และ Safari 9 (ซึ่งไม่รองรับdownloadคุณสมบัติ ) จะดาวน์โหลดไฟล์ด้วยชื่อเริ่มต้นหรือจะแสดงในแท็บใหม่หากเป็นไฟล์ประเภทที่รองรับ: รูปภาพวิดีโอและไฟล์เสียง , ...


ทั้งการสาธิตการทำงานที่ดีสำหรับฉันใน Chrome 38 ( แต่พวกเขาควรจะทำงานใน Chrome 14+)
fregante

สำหรับวิธีการแก้ปัญหาที่สมบูรณ์ยิ่งขึ้นฉันแนะนำให้ใช้downloadjsใน
ศุกร์ที่

มันใช้งานได้สำหรับฉัน แต่หน้าเบราว์เซอร์จะรีเฟรชหลังจากนั้น สงสัยว่าจะป้องกันได้อย่างไร

1
ใช้งานไม่ได้กับโครเมียมสำหรับขนาดไฟล์> ข้อ จำกัด เนื่องจาก 2MB โดย chrome stackoverflow.com/questions/695151/…
Pranav Singh เมื่อ

ขีด จำกัด เป็นของdata:URI ซึ่งเป็นคำถามที่กล่าวถึง คำตอบนี้ใช้ได้กับ Blobs และสิ่งอื่น ๆ ที่มี URI
fregante

40

ตามที่RFC 2397ไม่ไม่มี

ไม่ปรากฏว่ามีคุณลักษณะใด ๆของ<a>องค์ประกอบที่คุณสามารถใช้ได้เช่นกัน

อย่างไรก็ตาม HTML5 ได้เปิดตัวdownloadคุณลักษณะใน<a>องค์ประกอบต่อมาแม้ว่าในขณะที่เขียนการสนับสนุนไม่เป็นสากล (ไม่มีการสนับสนุน MSIE เป็นต้น)


9
ประโยคที่สองที่ถูกต้องในขณะที่เขียน แต่ไม่ได้อีกต่อไป ณ ตอนนี้มันยังไม่ได้นำไปใช้อย่างกว้างขวาง
บินแกะ

ดูความคิดเห็นนี้สำหรับข้อมูลเพิ่มเติม :)
flying sheep

@flyingsheep มันถูกนำมาใช้อย่างกว้างขวาง
Pacerier

1
มันไม่ได้เป็นเมื่อ 3 ปีก่อนเมื่อฉันเขียนความคิดเห็นนั้น
flying sheep

หากไฟล์ยาวเกินไปการดาวน์โหลดล้มเหลว
deFreitas

21

ฉันดูแหล่งข้อมูล Firefox ใน netwerk / protocol / data / nsDataHandler.cpp

ตัวจัดการข้อมูลแยกวิเคราะห์เนื้อหา / ประเภทและชุดอักขระเท่านั้นและดูว่ามี "; base64" ในสตริง

rfc ไม่ระบุชื่อไฟล์และอย่างน้อย firefox จัดการกับชื่อไฟล์ไม่ได้รหัสจะสร้างชื่อแบบสุ่มรวมทั้ง ".part"

ฉันได้ตรวจสอบบันทึกของ Firefox แล้วเช่นกัน

[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

ฉันคิดว่าคุณสามารถหยุดค้นหาวิธีการแก้ปัญหาในขณะนี้เพราะฉันสงสัยว่าไม่มี :)

ตามที่สังเกตในหัวข้อ html5 นี้มีdownloadคุณลักษณะมันทำงานบน firefox 20 http://www.whatwg.org/specs/web-apps/current-work/multipage/links.html#attr-hyperlink-download


3
เย็น! แม้ว่าฉันจะไม่เห็นด้วยว่า Firefox เป็นอำนาจสูงสุดในสิ่งที่มีอยู่ :)
Gleno

14

ตัวอย่าง Javascript ต่อไปนี้ใช้งานได้ใน Chrome โดยใช้แอตทริบิวต์ 'ดาวน์โหลด' ใหม่ของลิงก์และจำลองการคลิก

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
สิ่งนี้ใช้ไม่ได้ใน Firefox ฉันได้เพิ่มคำตอบเพิ่มเติมด้านล่างด้วยความเข้ากันได้กับ Fx
Fregante

12

เลขที่

จุดประสงค์ทั้งหมดคือเป็นสตรีมข้อมูลไม่ใช่ไฟล์ แหล่งข้อมูลไม่ควรมีความรู้ใด ๆ เกี่ยวกับเอเจนต์ผู้ใช้ที่จัดการเป็นไฟล์ ... และไม่มี


6
จุดประสงค์ของการใช้data:คือการทำให้บล็อกข้อมูลภายในเป็นรูปแบบ URL โดยไม่ต้องอ่านจากแหล่งที่มาของโปรโตคอล ลิงก์ในคำตอบของ @ silex แสดงให้เห็นว่าความสามารถในการแนะนำชื่อที่ต้องการให้เขียนนั้นถือว่ามีประโยชน์แม้ว่าจะยังไม่ได้ใช้งานก็ตาม
Alnitak

1
@Alnitak: มีประโยชน์หรือไม่ อย่างแน่นอน เหมาะสมทางเทคนิคหรือไม่ ยังไม่มั่นใจ :)
Lightness Races ในวงโคจร

3
@ Tomalak พิจารณาความแตกต่างระหว่างการโหลดข้อมูลและการบันทึก - เพียงเพราะ blob ถูกเข้ารหัสแบบอินไลน์ในข้อมูล: URL ไม่ได้หมายความว่ามันไม่ควรมีชื่อที่ต้องการในการบันทึก
Alnitak

4
แต่บรรทัดของคุณเกี่ยวกับมันคือ "จุดประสงค์ทั้งหมด" ผิด data:ได้รับการคิดค้นขึ้นโดยเฉพาะเพื่ออนุญาตให้เนื้อหาอินไลน์ (เล็ก) ปรากฏในรูปแบบ URL ที่รวมตัวกันเพื่อให้สามารถใช้สิ่งต่าง ๆ เช่นแท็กภาพโดยไม่มีการร้องขอ HTTP แยกต่างหาก HTML กล่าวว่าเนื้อหาของimg srcแอตทริบิวต์ต้องเป็น URL ดังนั้นจึงเป็นสิ่งที่ RFC 2397 สร้างขึ้น ไม่มี "แหล่งข้อมูล"
Alnitak

6
@Alnitak: แน่นอน ไม่มีแหล่งข้อมูล ไม่มีบริบท URI คือข้อมูล
Lightness Races ในวงโคจร

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 ท้าย
เช่นนี้ (ใน Opera อย่างน้อย):

ข้อมูล: text / plain; charset = UTF-8; หัว = Disposition เนื้อหา% 3A% 20attachment% 3B% 20filename% 3D% 22with% 20spaces.txt% 22% 0D% 0AContent ภาษา% 3A% 20en; base64,4oiaDQo% 3D

นอกจากนี้ยังมีข้อมูลบางอย่างในข้อความที่เหลือของการสนทนา


โชคไม่ดีที่ดาวน์โหลดไม่ได้
James Khoury

7
การสนทนานี้มีไว้สำหรับส่วนขยายที่เสนอไปยังรูปแบบ URI ของข้อมูลซึ่งยังไม่มีการนำไปใช้
Alnitak

ดำเนินการหรือไม่ด้วยการสนับสนุนที่มีอยู่สำหรับพารามิเตอร์โดยพลการนี้จะดี
Dan Lugg

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

มีวิธี "ตอบสนอง" กับ URL โดยตรงไปยังไฟล์อื่นหรือไม่?
Iulian Onofrei

4

มีสคริปต์วิธีแก้ไขปัญหาเล็กน้อยบน Google Code ที่ทำงานให้กับฉัน:

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

มันเพิ่มฟอร์มด้วยข้อมูลที่อยู่ในนั้นส่งมันแล้วลบแบบฟอร์มอีกครั้ง แฮ็ก แต่มันทำงานให้ฉันได้ ต้องใช้ jQuery

กระทู้นี้ปรากฏใน Google ก่อนหน้ารหัส Google และฉันคิดว่ามันอาจมีประโยชน์หากมีลิงก์อยู่ที่นี่เช่นกัน


สคริปต์ที่น่าสนใจ แต่มันต้องการให้เซิร์ฟเวอร์รับการตอบกลับและส่งมันกลับใช่มั้ย jsfiddle.net/hZySf
James Khoury

ฉันไม่แน่ใจว่าไฟล์นี้ถูกสร้างขึ้นจากอะไร .. ไฟล์นั้นถูกจัดเก็บในการเข้ารหัส base64 หรือไม่? (ฉันไม่คุ้นเคยกับ base64 เกินไป)
สตรีทไลท์

@streetlight: "ไฟล์" (เช่นข้อมูล) สร้างขึ้นโดย Javascript บริบทของโครงการนั้น (และอาจเป็นไปได้มากที่สุดที่นี่) สมมติว่าคุณมีวิธีรับข้อมูลที่ต้องการลงในตัวแปร JS ข้อแตกต่างคือแทนที่จะแสดงให้ผู้ใช้ทราบผ่านทางdata:...URI สคริปต์นั้นจะสร้างฟอร์มเพื่อ POST ไปยังเซิร์ฟเวอร์ จากนั้นเซิร์ฟเวอร์ก็สะท้อนกลับไปเป็น HTTP "ดาวน์โหลด" การตอบสนอง (เช่นมีส่วนหัวของเนื้อหา - การจัดการที่เหมาะสมซึ่งระบุชื่อไฟล์)
Andrzej Doyle

4

นี่คือรุ่น jQuery ที่ใช้เวอร์ชันของ Holf และทำงานร่วมกับ Chrome และ Firefox ในขณะที่รุ่นของเขาดูเหมือนว่าจะใช้งานได้กับ 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

มันช่างแฮ็ค แต่ฉันเคยอยู่ในสถานการณ์เดียวกันมาก่อน ฉันสร้างไฟล์ข้อความใน javascript แบบไดนามิกและต้องการให้มันดาวน์โหลดโดยการเข้ารหัสด้วย data-URI

สิ่งนี้เป็นไปได้ด้วยการแทรกแซงผู้ใช้รายใหญ่เล็กน้อย <a href="data:...">right-click me and select "Save Link As..." and save as "example.txt"</a>สร้างการเชื่อมโยง อย่างที่ฉันบอกไปนี่เป็นสิ่งที่ไม่เหมาะสม แต่จะใช้ได้ผลถ้าคุณไม่ต้องการโซลูชันระดับมืออาชีพ

อาจทำให้เจ็บปวดน้อยลงโดยใช้แฟลชเพื่อคัดลอกชื่อไปยังคลิปบอร์ดก่อน แน่นอนว่าถ้าคุณปล่อยให้ตัวเองใช้ Flash หรือ Java (ตอนนี้สนับสนุนเบราว์เซอร์ที่ฉันคิดว่าน้อยลงหรือไม่) คุณอาจจะหาวิธีอื่นในการทำเช่นนี้


นี่ไม่ใช่วิธีแก้ปัญหาและไม่เป็นไปตามที่ขอ ขอโทษ
jcolebrand

7
Lol @ "การแทรกแซงผู้ใช้เล็กน้อย" การทำให้ผู้ใช้ทำทุกอย่างเพื่อคุณไม่ใช่ "การแทรกแซงผู้ใช้รายย่อย"
Lightness Races ในวงโคจร

รวมสิ่งนี้กับstackoverflow.com/questions/17311645/…เพื่อเรียกลิงก์ที่สร้างขึ้นและคุณไม่ต้องการการแทรกแซงจากผู้ใช้ คุณสามารถระบุHTML5 downloadแอตทริบิวต์ที่จะแนะนำชื่อดังกล่าวโดยหลาย อื่น ๆ คำตอบ
drzaus

นี่เป็นวิธีแก้ปัญหาที่ดีสำหรับ Safari ใช้ Modernizr เพื่อตรวจหาเมื่อไม่รองรับคุณสมบัติการดาวน์โหลดและอัปเดตข้อความลิงก์!
littledynamo

2

อันนี้ใช้ได้กับ Firefox 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เพื่อดาวน์โหลด เคล็ดลับคือการใช้ไฟล์แทนหยด

การอ้างอิง: 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
กรุณาเพิ่มคำอธิบายรายละเอียดเพิ่มเติมสำหรับคำตอบของคุณ - stackoverflow.com/help/how-to-answer
Sebastian Brosch

1
คำตอบนี้เป็นขยะ
Jonathan Taylor

-2

คุณสามารถทำสิ่งนี้ได้จริงใน Chrome และ FireFox

ลอง URL ต่อไปนี้มันจะดาวน์โหลดรหัสที่ใช้

data:text/html;base64,PGEgaHJlZj0iZGF0YTp0ZXh0L2h0bWw7YmFzZTY0LFBHRWdhSEpsWmowaVVGVlVYMFJCVkVGZlZWSkpYMGhGVWtVaUlHUnZkMjVzYjJGa1BTSjBaWE4wTG1oMGJXd2lQZ284YzJOeWFYQjBQZ3BrYjJOMWJXVnVkQzV4ZFdWeWVWTmxiR1ZqZEc5eUtDZGhKeWt1WTJ4cFkyc29LVHNLUEM5elkzSnBjSFErIiBkb3dubG9hZD0idGVzdC5odG1sIj4KPHNjcmlwdD4KZG9jdW1lbnQucXVlcnlTZWxlY3RvcignYScpLmNsaWNrKCk7Cjwvc2NyaXB0Pg==
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.