2012-03-07 6 views
6

तो मैं इस तरह एक कार्रवाई से एक FileContentResult लौटने हूँ:ASP.NET MVC के साथ "फाइल डाउनलोड नहीं किया जा सकता है" इंटरनेट एक्सप्लोरर में

return File(pck.GetAsByteArray(), "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet", "MyExcelFile.xlsx"); 

"खोलें" IE में क्लिक करने जब (मैं कर रहा हूँ आईई 9, संस्करण 9.0.8112.16421 का उपयोग करके), यह कहता है "फ़ाइल डाउनलोड नहीं की जा सकी" और उपयोगकर्ता को 'पुनः प्रयास' बटन के साथ प्रस्तुत किया जाता है। अगर वे पुनः प्रयास करें, तो यह ठीक काम करता है। अगर वे सहेजें पर क्लिक करते हैं, तो यह ठीक काम करता है। फ़ायरफ़ॉक्स में, यह ठीक काम करता है।

क्लिक करने पर उपयोगकर्ता पहली बार फ़ाइल खोलने की अनुमति कैसे दे सकता है?

+0

क्या यानी के संस्करण? – Joe

+0

मैंने प्रश्न अपडेट किया है। –

+0

फिडलर इंस्टॉल करें और जब आप पहला अनुरोध करते हैं तो यह चल रहा है। आप सर्वर से वापस आने वाली प्रतिक्रिया का निरीक्षण करने में सक्षम होंगे। शायद इस मुद्दे पर कुछ प्रकाश डालेगा। http://www.fiddler2.com/fiddler2/ – Joe

उत्तर

2

मैं यूआर को संशोधित करके सही चीज करने में आईई "चाल" करने में सक्षम था। यह हैकी की तरह है, लेकिन यहां विस्तार है। HTH।

एक अच्छा एमवीसी कोडर के रूप में, मैंने अपने नियंत्रक कार्रवाई में मेरे दृश्य में सही लिंक उत्पन्न करने के लिए url.Action() का उपयोग किया। परिणाम "/ सदस्यता/डाउनलोड आर्चिव" था, और मेरे पास एक ही समस्या थी। (मैं एक ज़िप फ़ाइल को स्ट्रीम कर रहा हूं, लेकिन ऐसा लगता है कि यह आपके सीएसवी से अलग नहीं है।) अपनी पोस्ट पढ़ने के बाद, अभी एक सनकी पर, मैंने यूआरएल को "/ सदस्यता/डाउनलोड आर्चिव/आर्चिव.जिप" में हार्ड-कोड किया। मैं कोड में "Archive.zip" को अनदेखा करता हूं, लेकिन वास्तव में फ़ाइल नाम मैं अपने नियंत्रक की कार्रवाई से वापस आ जाता हूं।

प्रेस्टो!

0

मुझे एक ही समस्या थी, लेकिन अगर मैंने विजुअल स्टूडियो डेवलपमेंट सर्वर के पोर्ट नंबर को दूसरे में बदल दिया, तो यह समस्या गायब हो गई।

2

मुझे एक ही समस्या है और एक अच्छा समाधान नहीं दे सकता (इसके अलावा टूड सुझाव देता है, जो एक विकल्प है)। लेकिन फिडलर & सह के साथ स्थिति को देखते हुए, मेरे पास कुछ और जानकारी है जो मदद की हो सकती है।

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

फिडलर सर्वर प्रतिक्रियाओं को प्रत्येक एक्सेस पर समान होने के लिए दिखाता है, जहां तक ​​मैं कह सकता हूं। अनुरोध भिन्न होते हैं, तथापि (नमूने कुछ संपादित):

पहले अनुरोध:

GET http://localhost:12345/Item/PDF/id HTTP/1.1 
Accept: text/html, application/xhtml+xml, */* 
Referer: ... 
Accept-Language: ... 
User-Agent: Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; WOW64; Trident/5.0) 
Accept-Encoding: gzip, deflate 
Host: localhost:12345 
Connection: Keep-Alive 
Cookie: ASP.NET_SessionId=52znkt1fcisrolj44tnuyzu4 

दूसरा अनुरोध:

GET http://localhost:12345/Item/PDF/id HTTP/1.1 
Accept: */* 
Accept-Encoding: gzip, deflate 
User-Agent: Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; WOW64; Trident/5.0) 
Host: localhost:12345 
Connection: Keep-Alive 
Cookie: ASP.NET_SessionId=52znkt1fcisrolj44tnuyzu4 

ध्यान दें, कैसे दूसरा अनुरोध 'स्वीकार:' कम कर देता है हेडर को सिर्फ */*। यूआरएल में फ़ाइल एक्सटेंशन जोड़ने के लिए मैं अनिच्छुक हूं कि यह सुझाव है कि सुझाए गए डाउनलोड का नाम आइटम डेटा से उत्पन्न होता है, प्रतिक्रिया के साथ सबमिट किया जाता है और अन्यथा आईडी से पूरी तरह से असंबंधित नहीं होता है।

+0

हू, यह बहुत दिलचस्प है। मुझे इस पर वापस आना होगा और दूसरा नजर डालना होगा। –

+0

मैं आईई 11 के साथ एक ही मुद्दे में भाग गया। मैं फिडलर में एक ही परिणाम देखता हूं। मेरी प्रक्रिया स्थानीय प्रणाली से एक टेक्स्ट फ़ाइल खोलना था और इसे संपादित करना या स्क्रैच से एक बनाना था। सबसे अच्छा कामकाज जो मैं साथ आ सकता था, फ़ाइल नाम में 'filename.timestamp.txt' जैसे टाइमस्टैम्प जोड़ना था और इसके बाद ठीक काम किया। – JabberwockyDecompiler

0

इस काम करता है ..

Response.Clear(); 
Response.ClearHeaders(); 
Response.ClearContent(); 
Server.ScriptTimeout = 3000; 
Response.AppendHeader("Content-Disposition:", "attachment; filename=" + fileName); 
Response.ContentType = "application/x-msdownload"; 
excelFile.SaveXls(Response.OutputStream); 
Response.Flush(); 
HttpContext.Current.ApplicationInstance.CompleteRequest(); 
// Response.Close(); 
Response.End(); 
संबंधित मुद्दे