2011-09-19 12 views
19

वर्तमान में मेरे पास byte[] है जिसमें छवि फ़ाइल का सभी डेटा शामिल है, बस HttpPostedFileBase का एक उदाहरण बनाना चाहते हैं ताकि मैं मौजूदा विधि का उपयोग कर सकूं एक नया अधिभार एक बना रहा है।HttpPostedFileBase (या इसके विरासत प्रकार) का उदाहरण कैसे बनाएं

public ActionResult Save(HttpPostedFileBase file) 

public ActionResult Save(byte[] data) 
{ 
    //Hope I can construct an instance of HttpPostedFileBase here and then 
    return Save(file); 

    //instead of writing a lot of similar codes 
} 
+0

क्या आपको बाइट [] में संग्रहीत फ़ाइल को पार्स करने के लिए काम का जवाब मिला? मेरा सामग्री स्वभाव रखता है, आदि – Devela

उत्तर

36

एक व्युत्पन्न वर्ग के रूप में निम्नानुसार बनाएँ:

class MemoryFile : HttpPostedFileBase 
{ 
Stream stream; 
string contentType; 
string fileName; 

public MemoryFile(Stream stream, string contentType, string fileName) 
{ 
    this.stream = stream; 
    this.contentType = contentType; 
    this.fileName = fileName; 
} 

public override int ContentLength 
{ 
    get { return (int)stream.Length; } 
} 

public override string ContentType 
{ 
    get { return contentType; } 
} 

public override string FileName 
{ 
    get { return fileName; } 
} 

public override Stream InputStream 
{ 
    get { return stream; } 
} 

public override void SaveAs(string filename) 
{ 
    using (var file = File.Open(filename, FileMode.CreateNew)) 
     stream.CopyTo(file); 
} 
} 

अब आप इस वर्ग जहां HttpPostedFileBase की उम्मीद है के कहने पारित कर सकते हैं।

+2

सिर्फ यह दिखाना चाहता था कि आपके द्वारा बनाए गए मेमोरीफ़ाइल का उपयोग कैसे करें: 'string filePath = Path.GetFullPath ("C: \\ images.rar"); फ़ाइलस्ट्रीम फ़ाइलस्ट्रीम = नया फ़ाइलस्ट्रीम (फ़ाइलपाथ, फ़ाइलमोड.ऑपन); मेमोरीफ़ाइल फ़ाइल छवि = नया मेमोरीफ़ाइल (फ़ाइलस्ट्रीम, "एप्लिकेशन/एक्स-रार-संपीड़ित", "images.rar"); ' – Murat

1

आप मैन्युअल HttpPostedFileBase या व्युत्पन्न वर्ग (HttpPostedFile) का एक उदाहरण नहीं बना पाएंगे। इस वर्ग को केवल ढांचे द्वारा तत्काल माना जाना चाहिए। आप दूसरी नियंत्रक कार्रवाई से छुटकारा क्यों नहीं लेते हैं जो बाइट सरणी लेता है? यह आवश्यक नहीं है। डिफ़ॉल्ट मॉडल बाइंडर HttpPostedFileBase लेने वाले व्यक्ति के साथ ठीक काम करेगा।

+1

जेएस डेवलपर मुझे बाइट [] पोस्ट करता है, यह समस्या तब होती है जब उपयोगकर्ता अपलोड करने के लिए छवि फ़ाइल चुनने के बजाय क्लिपबोर्ड से एक छवि चिपका रहा है। –

+0

@ डैनी चेन, जेएस एक 'बाइट [] 'भेज रहा है? यह बहुत अजीब लगता है। क्या प्रोटोकॉल का उपयोग किया जा रहा है? –

+1

वह मुझे बेस 64 स्ट्रिंग भेज रहा है, यह व्यवहार किसी तृतीय पक्ष जेएस संपादक द्वारा किया जाता है। –

संबंधित मुद्दे