मैं एक वेब पेज बना रहा हूं जो उपयोगकर्ता को एबीसीपीडीएफ का उपयोग करके पीडीएफ के रूप में एक रिपोर्ट डाउनलोड करने की अनुमति देगा। लेकिन दस्तावेज़ीकरण को पढ़ते हुए, मुझे केवल doc.Save("test.pdf") (जो एप्लिकेशन को होस्ट करने वाले सर्वर पर फ़ाइल को सहेजता है) या 'HttpContext.Current.ApplicationInstance.CompleteRequest();' (जो क्लाइंट साइड पर सहेजता है, का उपयोग करके) का उपयोग कर रहा है। मुझे चाहिए, लेकिन HttpContext.Current .NET कोर पर उपलब्ध नहीं है।

मेरे पास जो बैंड-सहायता समाधान है वह doc.Save() के पास है, मैं फ़ाइल को सर्वर पर सहेजता हूं और फिर दृश्य के लिए एक लिंक भेजता हूं जो इसे सर्वर से डाउनलोड करता है। एक संभावित जोखिम जिसके बारे में मैं सोच सकता हूं, सर्वर पर डाउनलोड शुरू होने के बाद 'क्लीन अप' करना सुनिश्चित कर रहा है।

क्या HttpContext.Current और HttpResponse के लिए कोई वैकल्पिक/.NET कोर समकक्ष है?

यहां वह कोड है जिसे मैं काम करना चाहता हूं:

byte[] theData = doc.GetData();
Response.ClearHeaders();
Response.ClearContent();
Response.Expires = -1000;
Response.ContentType = "application/pdf";
Response.AddHeader("content-length", theData.Length.ToString());
Response.AddHeader("content-disposition", "attachment; filename=test.pdf"); 
Response.BinaryWrite(theData);
HttpContext.Current.ApplicationInstance.CompleteRequest();

त्रुटियां मुझे मिलती हैं (गैर-क्रियात्मक)

'HttpResponse' does not contain a definition for 'ClearHeaders'
'HttpResponse' does not contain a definition for 'ClearContent'
'HttpResponse' does not contain a definition for 'Expires'
'HttpResponse' does not contain a definition for 'AddHeader'
'HttpResponse' does not contain a definition for 'BinaryWrite'
'HttpContext' does not contain a definition for 'Current'
1
Paul_LayLow 9 नवम्बर 2018, 18:38

1 उत्तर

सबसे बढ़िया उत्तर

मैंने इस उत्तर को किसी ऐसी चीज़ में अपडेट कर दिया है जो वास्तव में काम करती है! GetStream आपको जो चाहिए वह करता है, हालांकि .NET कोर में फ़ाइल डाउनलोड की सुविधा के लिए यदि आप https://docs.microsoft.com/en-us/aspnet/core/tutorials/ फर्स्ट-वेब-एपीआई?व्यू=एस्पनेटकोर-2.1. फिर आप स्ट्रीम से फ़ाइल की सेवा के लिए रूट कंट्रोलर बना सकते हैं जैसा कि एएसपीनेट कोर का उपयोग करके पीडीएफ को ब्राउज़र पर लौटाएं। तो आपका नियंत्रक कुछ ऐसा दिखाई देगा:

[Route("api/[controller]")]
public class PDFController : Controller {
// GET: api/<controller>
    [HttpGet]
    public IActionResult Get() {
        using (Doc theDoc = new Doc()) {
            theDoc.FontSize = 96;
            theDoc.AddText("Hello World");
            Response.Headers.Clear();
            Response.Headers.Add("content-disposition", "attachment; filename=test.pdf");
            return new FileStreamResult(theDoc.GetStream(), "application/pdf");
        }
    }
}

जिज्ञासा से मैंने अभी इसका मज़ाक उड़ाया और यह काम करता है - जब आप यूआरएल लोकलहोस्ट: पोर्ट/एपीआई/पीडीएफ पर जाते हैं तो ब्राउज़र को सीधे पीडीएफ की सेवा करते हैं। यदि आप सामग्री-स्वभाव "इनलाइन; फ़ाइल नाम = test.pdf" बनाते हैं तो यह ब्राउज़र में दिखाई देगा और test.pdf के रूप में डाउनलोड करने योग्य होगा।

यहां गेटस्ट्रीम विधि के बारे में अधिक जानकारी: https://www.websupergoo.com/helppdfnet/default.htm?page=source%2F5-abcpdf%2Fdoc%2F1-methods%2Fgetstream.htm

3
Peter G 16 नवम्बर 2018, 12:39