2012-01-09 10 views
6

मैं उपयोग कर सकते हैं:एएसपी.नेट एमवीसी 3: एचटीएमएल 5 एकाधिक फ़ाइल अपलोड के लिए समर्थन?

<input type="file" name="files" id="files" multiple="multiple" /> 

और करने के लिए इसे बाँध:

[HttpPost] 
public ActionResult Upload(IEnumerable<HttpPostedFileBase> files) 
{ 
    ... 
} 

मैं आधुनिक ब्राउज़रों के लिए एक वेब अनुप्रयोग लिख रहा हूँ और इसलिए मैं करना चाहते हैं आईई बारे में चिंता करने की जरूरत नहीं है फ्लैश का उपयोग करने से बचें। जब मैं फॉर्म पोस्ट करता हूं तो अभी files हमेशा शून्य होता है। क्या एमवीसी 3 में काम करने के लिए इसे पाने का कोई तरीका है?

धन्यवाद!

+1

के संभावित डुप्लिकेट ([मल्टी फ़ाइल एचटीएमएल 5 के साथ अपलोड करें] http://stackoverflow.com/questions:

foreach (HttpPostedFileBase uf in Request.Files) { HttpPostedFileBase UpoadedFile = uf; } 

इस तरह करना चाहिए/8713802/बहु-फ़ाइल-अपलोड-एचटीएमएल -5) –

+1

आपको शायद एक कस्टम मॉडल बाइंडर बनाने की आवश्यकता होगी। – Craig

+0

या हस्ताक्षर 'सार्वजनिक एक्शन रिसेट अपलोड (एचटीपीपोस्टेडफाइलबेस [] फाइलें) ' –

उत्तर

13

क्या आपके पास अपने फॉर्म में अपना एन्कोडिंग सही ढंग से सेट है?

मैं आपको लगता है कि अभी भी जरूरत है: प्रपत्र घोषणा में

new { enctype = "multipart/form-data" } 

ब्राउज़र फ़ाइलें पोस्ट कर सकते हैं सुनिश्चित करने के लिए।

उदाहरण के लिए:

@using (Html.BeginForm("action", "controller", FormMethod.Post, new { enctype = "multipart/form-data" })) 
+0

हां, मेरे पास एन्कोडिंग सेट सही ढंग से है। धन्यवाद –

+0

ठीक है, बहुत जल्द बात की। दोबारा जांच करने के लिए वापस गया और मेरे पास एक टाइप-ओ था जो फाइल को पोस्ट करने से रोक रहा था! –

1

चाहेंगे नहीं एक का उपयोग पिछली संगतता के लिए Request.Files इस प्रकार है:

public ActionResult UploadFiles() 
{ 
    string UpoadedFilesFolder = "YourServerFolder"; 
    string fileName =""; 
    byte[] fileData=null; 
    foreach (HttpPostedFileBase uf in Request.Files) 
    { 
    HttpPostedFileBase UpoadedFile = uf; 
    if (uf.ContentLength > 0) 
    { 
     fileName = Path.GetFileName(UpoadedFile.FileName); 
     using (BinaryReader br = new BinaryReader(UpoadedFile.InputStream)) 
     { 
     fileData = br.ReadBytes((int)UpoadedFile.InputStream.Length); 
     } 
     using (FileStream fs = new FileStream(Path.Combine(System.Web.Hosting.HostingEnvironment.MapPath(UpoadedFilesFolder), fi.FileName), FileMode.Create)) 
     { 
     fs.Write(fileData, 0, fileData.Length); 
     } 
    } 
    } 
    return Content("OK"); 
} 
0

मेरे सूचकांक दृश्य:

@using (Html.BeginForm("Upload","home", FormMethod.Post,new { enctype = "multipart/form-data" })) 
{ 
    <input type="file" name="files" value=" " multiple="multiple" /> 
    <input type="submit" name="btUpload" value="Upload" /> 
} 

नियंत्रक

में
public ActionResult Upload(HttpPostedFileBase[] files) 
     { 
      TempData["Message"] = files.Count(); 
      return RedirectToAction("Index"); 
     } 

और फ़ाइलों में अपलोड की गई फ़ाइलें हैं - मेरे लिए ठीक काम करती है!

0

यह काम नहीं करेगा:

for (int i=0; i<Request.Files.Count; i++) 
{ 
    HttpPostedFileBase UpoadedFile = Request.Files[i]; 
} 
संबंधित मुद्दे