我正在使用文件流來接收我的控制器中的大文件。下面的代碼:如何取消並刪除asp.net mvc 3中的上傳文件?
[HttpPost]
public JsonResult Create(string qqfile, Attachment attachment)
{
Stream inputStream = HttpContext.Request.InputStream;
string fullName = ingestPath + Path.GetFileName(qqfile);
using (var fs = new FileStream(fullName, FileMode.Append, FileAccess.Write))
{
try
{
var buffer = new byte[1024];
int l = inputStream.Read(buffer, 0, 1024);
while (l > 0)
{
fs.Write(buffer, 0, l);
l = inputStream.Read(buffer, 0, 1024);
}
return Json(new {success = "true"});
}
catch (Exception)
{
return Json(new {success = "false"});
}
finally
{
inputStream.Flush();
inputStream.Close();
fs.Flush();
fs.Close();
}
}
}
在我的頁面的ajax方法,我添加一個按鈕來取消文件上傳和刪除磁盤未完成的文件。 Ajax請求來命名的動作「取消」:
[HttpPost]
public JsonResult Cancel(string filename)
{
string localName = HttpUtility.UrlDecode(filename);
string fullName = ingestPath + Path.GetFileName(localName);
if (System.IO.File.Exists(fullName))
{
System.IO.File.Delete(fullName);
}
return Json(new {cancle = true});
}
的問題是:該文件不能刪除和異常消息是
該進程無法訪問該文件「E:\的TempData \ filename_xxx.xxx「,因爲它正在被另一個進程使用。
我認爲這是因爲該文件的文件流沒有關閉。如何關閉此文件流並在「取消」操作中刪除文件?
-
OH!我找到了一種方法來解決它。
using (var fs = new FileStream(fullName, FileMode.Append, FileAccess.Write))
這是簡單,只要申報文件共享屬性:FileShare.Delete
using (var fs = new FileStream(fullName, FileMode.Append, FileAccess.Write, FileShare.Delete))
我花了4小時,谷歌和調試和測試,並試圖解決它。在我問了一個stackoverflow後10分鐘,我自己得到了答案。有趣!並希望它對某人也有用。
我剛剛學會了如何使用system.io.file.Thanks刪除文件夾中的文件以便查詢 – bhargav