Asp.net mvc asp.net网站应在何处保存上载的文件,以及如何为这些文件创建下载链接?
我有一个使用MVC框架的asp.net web应用程序,该网站允许注册者上传一些身份证明文件 我想要上传这些文档的最佳选项:Asp.net mvc asp.net网站应在何处保存上载的文件,以及如何为这些文件创建下载链接?,asp.net-mvc,file-upload,download,Asp.net Mvc,File Upload,Download,我有一个使用MVC框架的asp.net web应用程序,该网站允许注册者上传一些身份证明文件 我想要上传这些文档的最佳选项: 选项1-在网站文件夹中创建一个目录,并将其名称保存在website web.config文件中,并将文档文件名保存在我的数据库中,因此,当我要撰写下载链接时,我必须将根url、文件夹名称和 文档文件名 比如说+ “/DoucmentsFolder”+ “/Documentfilename” 选项2-将整个文件保存在数据库中,每次我需要下载文件时,我都必须将其保存到临时文
- 选项1-在网站文件夹中创建一个目录,并将其名称保存在website web.config文件中,并将文档文件名保存在我的数据库中,因此,当我要撰写下载链接时,我必须将根url、文件夹名称和 文档文件名 比如说+ “/DoucmentsFolder”+ “/Documentfilename”
- 选项2-将整个文件保存在数据库中,每次我需要下载文件时,我都必须将其保存到临时文件夹并创建指向该文件的链接,并确保在用户获得该文件后删除该文件
- 也许你还有其他建议
谢谢使用文件存储存在多个问题: 1) 清理-您需要将文件留在那里足够长的时间,以便请求和收集,但如何清理?如果你不这样做,你就有耗尽空间的风险。最好的方法是每隔一段时间运行一次计划任务,并删除一个小时以上的文件——但这仍然很麻烦 2) 无法很好地扩展—除非您写入SAN—在web garden/farm场景中,用户对文件的请求可能会到达与存储该文件的服务器不同的服务器—除非您约束您的系统以强制来自用户的所有请求使用同一服务器 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);
}
使用文件存储存在多个问题: 1) 清理-您需要将文件留在那里足够长的时间,以便请求和收集,但如何清理?如果你不这样做,你就有耗尽空间的风险。最好的方法是每隔一段时间运行一次计划任务,并删除一个小时以上的文件——但这仍然很麻烦 2) 无法很好地扩展—除非您写入SAN—在web garden/farm场景中,用户对文件的请求可能会到达与存储该文件的服务器不同的服务器—除非您约束您的系统以强制来自用户的所有请求使用同一服务器 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);
}
很好的解决方案,但我想知道如何确保只有上传文件的人才能下载??我想检查已登录的用户,这要求我在文件信息中保存文件所有者的ID。只需扩展MyFile的定义以包括userId(或Role!),然后您就可以查询userId是否匹配,或者用户是否处于Role等。很好的解决方案,但我想知道如何确保只有上传文件的人才能下载??我想检查已登录的用户,这要求我在文件信息中保存文件所有者的ID。只需扩展MyFile的定义以包括userId(或Role!),然后您就可以查询userId是否匹配,或者用户是否处于Role等。。