與使用的FileStore的問題是多方面的:
1)清理 - 你需要離開你的文件中,有足夠長的請求,並收集,但你怎麼幹淨向上?如果你不這樣做,你會面臨空間不足的風險。最好的辦法是每隔一段時間運行一次計劃任務,並刪除比一小時更早的文件 - 但這仍然很麻煩。
2)不能很好地擴展 - 除非寫入SAN - 在網絡花園/農場場景中,用戶請求的文件可能與存儲該文件的服務器不同 - 除非您限制系統強制用戶的所有請求使用同一臺服務器。
3)不高效 - 與數據庫操作進行比較。
所以我會說數據庫肯定 - 這是比你說明要容易得多。
而不是創建一個文件,並給它一個鏈接,文件恢復爲FileContentResult:
public FileContentResult GetFile(int fileId)
{
myFile MyFile = fileRepository.Get(fileId);
return MyFile(file.Data, file.MimeType);
}
}
其中MyFile的樣子:
public class MyFile
{
public MyFile(byte[] fileData, string mimeType)
{
this.FileData = fileData;
this.MimeType = mimeType;
}
public virtual int Id {get; private set;}
public virtual byte[] FileData { get; set; }
public virtual string MimeType { get; set; }
}
存儲文件
[HttpPost]
public ActionResult SaveFile(HttpPostedFileBase userFile)
{
MyFile myFile = new MyFile(new byte[userFile.ContentLength], userFile.ContentType)
userFile.InputStream.Read(MyFile.FileData, 0, userFile.ContentLength);
fileRepository.Save(myFile);
}
偉大的解決方案,但我不知道如何確保只有人wh o上傳的文件是否允許下載?我想檢查記錄的用戶,這些用戶需要我將文件所有者的ID保存在文件信息中。 –
只要擴展MyFile的定義以包含userId(或Role!),那麼您可以查詢userId是否匹配,或者用戶是否在角色等。 – BonyT
好,這正是我想到的。 –