我想在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();
}
不確定它是否有幫助,但請嘗試將HttpPostedFileBase上傳參數放到UploadSWF中,並查看它是否爲空。 – 2015-02-18 00:50:24
我曾試過這個。其實這是我想要實現的第一種方式,但我總是得到一個MissingMethodException。該請求無法通過經典的
也許你應該添加你的發帖代碼。 – 2015-02-18 00:57:11