วิธีตั้งชื่อไฟล์ตอบกลับโดยไม่บังคับให้กล่องโต้ตอบ“ บันทึกเป็น”


122

ฉันกำลังส่งคืนสตรีมในการตอบสนองบางอย่างเพื่อตั้งค่าcontent-typeส่วนหัวที่เหมาะสม พฤติกรรมที่ฉันกำลังมองหาคือ:

  • หากเบราว์เซอร์สามารถแสดงเนื้อหาของประเภทเนื้อหาที่กำหนดก็ควรแสดงในหน้าต่างเบราว์เซอร์

  • หากเบราว์เซอร์ไม่ทราบวิธีแสดงผลเนื้อหาควรแสดงกล่องโต้ตอบ "บันทึกเป็น" โดยที่ชื่อไฟล์ควรเป็นชื่อที่ให้ไว้ในการตอบกลับ

ปัญหาคือถ้าฉันตั้งค่าContent-Dispositionส่วนหัวด้วย:

"ไฟล์แนบ; filename =" myfile.txt ""

เบราว์เซอร์จะแสดงกล่องโต้ตอบ "บันทึกเป็น" เสมอ

หากฉันไม่ได้ตั้งค่าContent-Dispositionชื่อไฟล์ที่ใช้ในกล่องโต้ตอบ "บันทึกเป็น" จะเป็นชื่อใน URL ที่ใช้ไม่ได้ในกรณีของฉัน

ฉันยังลองตั้งค่าContent-Dispositionเป็นinlineแต่ผลลัพธ์ก็เหมือนกัน

คำตอบ:


173

วิธีที่ถูกต้องอาจเป็น:

Content-Disposition: inline; filename="myfile.txt"


7
ฉันไม่แน่ใจว่าคุณหมายถึงอะไรเมื่อ 'ไม่ได้รับการสนับสนุนอย่างกว้างขวาง' ในตอนที่คุณเขียนคำตอบนี้และหวังว่าคุณจะให้ข้อเท็จจริงที่ยากลำบากแทน FUD ฉันเพิ่งทดสอบใน IE 6, IE 8, Chrome สมัยใหม่และ Firefox รุ่นใหม่และใช้งานได้กับทั้งหมด เท่าที่ฉันสามารถบอกได้ว่าปัจจุบันปลอดภัยแล้วที่จะใช้สิ่งนี้
Mark Amery

ไม่ทำงานกับ FireFox 37.0.2 และ Internet Explorer 11.0.18 ของฉัน ฉันพบกับกล่องโต้ตอบบันทึกเป็น Chrome ใช้งานได้
angularsen

3
จริงๆแล้วมันใช้งานได้ทั้งใน Firefox 37.0.2 และ IE 11.0.18 (เพิ่งทดสอบ) คุณอาจใช้ Content-Type ซึ่งเบราว์เซอร์ของคุณไม่สามารถแสดงแบบอินไลน์ได้
Patonza

1
บันทึกย่อบางส่วนที่ครอบคลุมโดยการอภิปรายต่างๆที่stackoverflow.com/questions/93551/… - หากคุณมีช่องว่างในชื่อไฟล์คุณต้องมีเครื่องหมายคำพูดคู่ ( ") รอบชื่อไฟล์ของคุณ หากคุณมีอักขระที่ไม่ใช่ ASCII ในชื่อไฟล์ของคุณคุณจะเห็นคำถามอื่น ๆ เพื่อการสนทนาว่าต้องทำอย่างไร
Christopher Schultz

ไม่ทำงานกับ PDF ใน IE11.0.96 ไม่แปลกใจเลยที่ Chrome ทำงานได้ดี
user1566694

2

ฉันไม่แน่ใจว่าเป็นไปได้ตามค่าเริ่มต้นหรือไม่ เนื่องจากปัญหาด้านความปลอดภัยเบราว์เซอร์จึงไม่ส่งเนื้อหาทุกประเภทที่สามารถจัดการได้ แต่มีเพียงไม่กี่ประเภทAccept-Encodingซึ่งไม่ได้ช่วยอะไรมากในสถานการณ์ของคุณ

บางทีคุณอาจถามผู้ใช้ของคุณว่าพวกเขาชอบอะไรและเก็บข้อมูลนั้นไว้ในโปรไฟล์ของพวกเขา

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