你的代碼是正確的,但我會只使用快捷鍵此類型的任務:
byte[] image = File.ReadAllBytes(fileName);
編輯: 如果你想發佈在行動的文件,然後將其保存在數據庫 - 最簡單的方法這樣做是形式張貼:
<form action="@Url.Action("NewReport")" method="post" enctype="multipart/form-data">
<input type="file" name="file" id="file" />
<input type="submit" name="submit" value="Submit" />
</form>
那麼你的行動應該是這樣的:
[HttpPost]
public ActionResult NewReport(HttpPostedFileBase file)
{
byte[] image = new byte[file.ContentLength];
file.InputStream.Read(image, 0, image.Length);
//here the code that saves image to db and returns action result
}
注意,在asp.net發佈文件的最大長度爲4MB,但是你可以很容易地擴展到適合你的尺寸在web.config文件:
<configuration>
<system.web>
<!--here I extend max length to 200Mb-->
<httpRuntime maxRequestLength="204800" />
</system.web>
</configuration>
你能證明你的整個控制器動作讀取文件? –
[HttpPost] public byte [] NewReport(string filename) { FileStream fs = new FileStream(fileName,FileMode.Open,FileAccess.Read); BinaryReader br = new BinaryReader(fs); byte [] image = br.ReadBytes((int)fs.Length); } – user3532152
我甚至嘗試將參數類型從字符串轉換爲HttpPostedFileBase,但又是同樣的錯誤。它還表示傳入文件是空的... – user3532152