سؤال

لقد واجهت مشكلة حيث لا يفتح IE مربع الحوار Save As/Open لمستند Excel كما يفعل Firefox.

لذلك قمت بإنشاء مرشح servlet يستخدم "*.xls" كنمط عنوان url.المشكلة التي أواجهها الآن (نظرًا لأن هذا هو الفلتر الأول الذي قمت بإنشائه) هي كيفية الحصول على اسم الملف الذي يريده المستخدم بحيث يتم ملء مربع الحوار بشكل صحيح.يتم حاليًا استدعاء عامل التصفية عندما يحدد المستخدم رابطًا في صفحة معينة.

وهنا ما توصلت إليه:

ما ورد أعلاه هو ما قمت به doFilter().

String fileName = "fileName.xls";

HttpServletRequest httpRequest = (HttpServletRequest) pRequest;
String requestURI = httpRequest.getRequestURI();

if(StringUtils.isNotBlank(requestURI))
{
  String uri[] = StringUtils.split(requestURI, '/');
  fileName = uri[uri.length - 1];
}

HttpServletResponse httpResponse = (HttpServletResponse) pResponse;
httpResponse.setContentType("application/vnd.ms-excel");
httpResponse.setHeader("Content-disposition", "attachment; filename=\"" + fileName +"\"");

web.xml:

<filter>
    <filter-name>ExcelFilter</filter-name>
    <filter-class>vsg.rp.common.ExcelFilter</filter-class>
</filter>
<filter-mapping>
    <filter-name>ExcelFilter</filter-name>
    <url-pattern>*.xls</url-pattern>
</filter-mapping>

كل هذا يعمل في صندوق التطوير الخاص بي:ويندوز إكس بي، جي بوس، إكليبس، أوراكل.ولكن عندما يتم تشغيله على خادم الاختبار — Linux، وApache/JBoss، وOracle — فإنه لا يعمل.يبدو أنه لم يتم استدعاء عامل التصفية، ولم يتم طرح أي أخطاء، وما إلى ذلك.أي فكرة عن سبب حدوث ذلك؟

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

المحلول

وأنت ترغب في نوع محتوى المقرر بشكل مناسب وكذلك رأس التصرف المحتوى، على النحو التالي:

<اقتباس فقرة>   

وresponse.setContentType ( "التطبيق / vnd.ms-إكسل")؛
  response.setHeader ( "ترتيب المحتوى"،   "المرفق؛ اسم الملف = \" "+ اسم +   "\" ")؛

نصائح أخرى

استخدم ال Content-Disposition رأس HTTP وقم بتعيينه على شيء مثل:

attachment; filename=myworkbook.xls

هو أ مقالة قاعدة معارف مايكروسوفت كل شيء عن هذه المشكلة.وهنا مثال على إعداد ترتيب المحتوى في كود Java.

بالإضافة إلى تعيين رؤوس نوع المحتوى، ستحتاج أيضًا إلى التأكد من أن الخادم لا يطلب من المتصفح عدم تخزين الملف مؤقتًا.

في IE Land، إذا طلبت من IE عدم تخزين الملف مؤقتًا، فإنه يقوم بتنزيل الملف بكل سرور...ثم يحاول فتح الملف من الدليل الذي حفظ الملف فيه...ومع ذلك، نظرًا لأن الرؤوس تقول "لا تقم بالتخزين المؤقت"، فإنها تأخذ هذا حرفيًا، ولا تحفظ الملف، وبالتالي فإن Excel يلقي خطأً يقول، "لا يوجد ملف!".

قصة طويلة قصيرة، اطلب من IE تخزين الملف مؤقتًا.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top