تحديد اسم الملف لملف PDF الديناميكي في asp.net

StackOverflow https://stackoverflow.com/questions/74019

  •  09-06-2019
  •  | 
  •  

سؤال

كيف يمكنني تحديد اسم الملف عند تفريغ البيانات في دفق الاستجابة؟

حاليًا أقوم بما يلي:

byte[] data= GetFoo();
Response.Clear();
Response.Buffer = true;
Response.ContentType = "application/pdf";            
Response.BinaryWrite(data);
Response.End();

باستخدام الكود أعلاه، أحصل على "foo.aspx.pdf" كاسم للملف المراد حفظه.يبدو أنني أتذكر القدرة على إضافة رأس إلى الاستجابة لتحديد اسم الملف المراد حفظه.

هل كانت مفيدة؟

المحلول

أضف ترتيبًا للمحتوى إلى الرأس:

Response.AddHeader("content-disposition", @"attachment;filename=""MyFile.pdf""");

نصائح أخرى

لعِلمِكَ...إذا كنت تستخدم "مضمنًا" بدلاً من "مرفقًا"، فسيتم فتح الملف تلقائيًا في IE.بدلاً من مطالبة المستخدم بمربع حوار فتح/حفظ.

Response.AppendHeader("content-disposition", string.Format("inline;FileName=\"{0}\"", fileName));
Response.AppendHeader("Content-Disposition", "attachment; filename=foo.pdf");

لسبب ما، لا يبدو أن معظم الإجابات الموجودة تحاول ترميز قيمة اسم الملف.إذا كان الملف يحتوي على مسافات أو فواصل منقوطة أو علامات اقتباس، فقد لا يتم عرضه بشكل صحيح.

يبدو أنه يمكنك استخدام ContentDisposition فئة لإنشاء قيمة رأس صحيحة:

Response.AppendHeader("Content-Disposition", new ContentDisposition
{
    FileName = yourFilename
}.ToString());

يمكنك التحقق من الكود المصدري لـ ContentDisposition.ToString() للتأكد من أنه يحاول ترميزه بشكل صحيح.

تحذير:يبدو أن هذا يتعطل عندما يحتوي اسم الملف على شرطة (وليس واصلة).ولم أكلف نفسي عناء النظر في هذا بعد.

 Response.AddHeader("Content-Disposition", "attachment;filename=" & FileName & ";")
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top