2015-02-18 95 views
6

我想在ASP.NET 5中上傳文件,但是我在互聯網上看到的兩種方式失敗。 使用XMLHttpRequest這裏是我的服務器端代碼:上傳文件ASP.NET 5

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

[編輯1]:我的客戶端:

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); 
} 

但我可以從這個唯一得到的是:

------ WebKitFormBoundaryX1h5stVbtaNe6nFw Content-Disposition:form-data; NAME = 「上傳」;文件名= 「data.swf在」 內容類型:應用程序/ x-衝擊波閃光 CWS ;」

[EDIT 2]:下面是代碼我如何得到這樣的:

public ActionResult UploadSWF() 
    { 
     Stream bodyStream = Context.Request.Body; 
     var sr = new StreamReader(bodyStream); 
     var test = sr.ReadToEnd(); 
     return View(); 
    } 

所以我得到的文件和內容類型而不是它的內容的名稱。

這個答案https://stackoverflow.com/a/26445416/1203116正在複製流成一個文件但文件創建部分工作不適合我,我不不知道發生了什麼,但沒有任何反應。所以我試圖用MemoryStream做同樣的事情,我得到一個空字符串。

所以最後我嘗試另一種方式,使用IFormFile像如下所示:https://github.com/aspnet/Mvc/blob/437eb93bdec0d9238d672711ebd7bd3097b6537d/test/WebSites/ModelBindingWebSite/Controllers/FileUploadController.cs 這個接口應該是在我已經加入到我的項目Microsoft.AspNet.Http但我仍然無法訪問它。我在這個命名空間中看不到任何IFormFile。

[編輯1]:我試過的第一種方法是使用HttpPostedFileBase,就像我曾經在ASP.NET MVC 5中使用過的一樣,但它並不適用於我的vNext項目。我總是得到一個MissingMethodException。 我的客戶端代碼是:

<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> 

而且在我的控制器:

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

不確定它是否有幫助,但請嘗試將HttpPostedFileBase上傳參數放到UploadSWF中,並查看它是否爲空。 – 2015-02-18 00:50:24

+0

我曾試過這個。其實這是我想要實現的第一種方式,但我總是得到一個MissingMethodException。該請求無法通過經典的

到達方法控制器。 我的原始ASP.NET MVC 5項目運行良好。所以我試圖爲我的vNext項目找到其他東西...... – 2015-02-18 00:54:48

+0

也許你應該添加你的發帖代碼。 – 2015-02-18 00:57:11

回答

8

IFormFile被引入作爲beta3版發佈的一部分。你可能有過時的包裹。檢查你的project.json,並確保你使用beta3(或更新)的軟件包。

+0

我只能在Nuget上看到Beta2 http://www.nuget.org/packages/Microsoft.AspNet.Http/1.0.0-beta2我怎樣才能得到這個Beta3? – 2015-02-18 01:12:33

+0

好吧,我沒有得到,只是通過改變我的project.json它會自動獲得最新的一個,即使Nuget不顯示它。謝謝Ajay – 2015-02-18 01:16:53

+0

使用Beta3無法正常工作。我認爲這太早了。你知道如何處理XmlHttpRequest? – 2015-02-18 01:35:55