2015-02-18 73 views
6

ASP.NET 5'te bir dosya yüklemeye çalışıyorum ama internette gördüğüm iki yol başarısız.Dosya Yükle ASP.NET 5

public async Task<ActionResult> UploadSWF() 
{ 
    StreamReader reader = new StreamReader(Request.Body); 
    var text = await reader.ReadToEndAsync(); 
    return View(); 
} 

[DÜZENLEME 1]: Burada XMLHttpRequest ile benim sunucu tarafı kodu Müvekkilim tarafı:

var client = new XMLHttpRequest(); 
function upload() 
{ 
    var file = document.getElementById("uploadfile"); 
    var formData = new FormData(); 
    formData.append("upload", file.files[0]); 
    client.open("post", "/Home/UploadSWF", true); 
    //client.setRequestHeader("Content-Type", "multipart/form-data"); 
    client.setRequestHeader("Content-Type", "application/x-shockwave-flash"); 
    client.send(formData); 
} 

Ama bu alabileceğiniz tek şey:

------ WebKitFormBoundaryX1h5stVbtaNe6nFw İçerik-Disposition: form-data; "Upload" = isim; filename = "data.swf" Content-Type: application/x-shockwave-flash CWS ;"

[DÜZ 2]:

public ActionResult UploadSWF() 
    { 
     Stream bodyStream = Context.Request.Body; 
     var sr = new StreamReader(bodyStream); 
     var test = sr.ReadToEnd(); 
     return View(); 
    } 
: İşte bu olsun nasıl kodudur

yüzden dosya ve içerik türü değil içeriğinin adını almak.

https://stackoverflow.com/a/26445416/1203116 ancak dosya oluşturma kısmı bana çalışmayan bir dosya içine akışı kopyalıyor Bu cevap, I don' neler olduğunu biliyoruz ama hiçbir şey olmuyor. Ben de aynı şeyi MemoryStream ile yapmaya çalıştım ve boş bir dizim var. https://github.com/aspnet/Mvc/blob/437eb93bdec0d9238d672711ebd7bd3097b6537d/test/WebSites/ModelBindingWebSite/Controllers/FileUploadController.cs Bu arayüz Projemde eklediğiniz Microsoft.AspNet.Http olmalıdır ama yine de erişmek mümkün değilim:

Sonunda ben burada gösterildiği gibi IFormFile kullanarak, başka bir yol denedi. Bu ad alanında hiçbir IFormFile göremiyorum.

[DÜZENLEME 1]: denedim ilk yöntem ASP.NET MVC 5'de kullanılmıştır ama benim vNext projede çalışmıyor gibi HttpPostedFileBase kullanmaktır. Her zaman bir MissingMethodException var. istemci tarafında Kodum oldu:

<form action="/home/UploadSWF" method="POST" enctype="multipart/form-data"> 
     <input type="file" name="file" accept=".swf, application/x-shockwave-flash/*"> 
     <input type="submit" name="submit" /> 
    </form> 

Ve benim denetleyicisi:

public ActionResult UploadSWF(HttpPostedFileBase file) 
{ 
    return View(); 
} 
+0

Yardımcı olup olmadığından emin değilsiniz, ancak UploadSWF'nize bir HttpPostedFileBase yükleme bağımsız değişkeni eklemeyi deneyin ve boş değil mi bakın. –

+0

Bunu denedim. Aslında uygulamak istediğim ilk yoldu ama her zaman bir MissingMethodException aldım. İstek, klasik

ile yöntem denetleyicisine ulaşamaz. Orijinal ASP.NET MVC 5 projemde iyi çalışıyordu. Bu yüzden vNext projem için başka bir şey bulmaya çalıştım ... –

+0

Belki de posta kodunuzu eklemelisiniz. –

cevap

8

IFormFile beta3 sürüm kapsamında tanıtıldı. Muhtemelen eski paketleriniz var. project.json numaranızı kontrol edin ve beta3 (veya daha yeni) paketler kullandığınızdan emin olun.

+0

Sadece Beta2'yi Beta'da görebiliyorum http://www.nuget.org/packages/Microsoft.AspNet.Http/1.0.0-beta2 Bu Beta3'ü nasıl alabilirim? –

+0

Tamam, bunu sadece projemi değiştirerek alamadım.sonrama, Nuget bunu göstermese bile otomatik olarak en yeni olanı alacaktır. Teşekkür ederim Ajay –

+0

Bu, Beta3 ile düzgün çalışmıyor. Bence çok erken. XmlHttpRequest ile nasıl başa çıkacağınızı biliyor musunuz? –