我已经看到了很多使用 MVC 上传文件的工作示例。
但是,我想采用一种不同的方法,这样,我想要一点抽象,如下所示:
我想引入一个 FileService,并将其作为依赖项注入到控制器中。让服务上传文件并返回一个 UploadedFile 对象。
我现在遇到的一个问题是上传到文件系统或应用程序根目录中的正确位置/目录。
在控制器中,我可以访问Server
我可以调用的对象Server.MapPath
并且它具有魔力,在下面我无法访问该对象,因为它不是Controller
.
如何上传到文件系统或项目根目录中的任何位置?
public class FileService : IFileService
{
private const string UploadBase = "/Files";
public File UploadFile(HttpPostedFileBase file)
{
if (file != null)
{
string folder = DateTime.Today.Month + "-" + DateTime.Today.Year;
string finalFolder = Path.Combine(UploadBase, folder);
if (!Directory.Exists(finalFolder))
{
return Directory.CreateDirectory(finalFolder);
}
var filename = UploadFile(file, directoryInfo.Name + "/");
var newFile = new File { ContentType = file.ContentType, FilePath = filename, Filename = file.FileName };
return newFile;
}
return null;
}
错误是:
The SaveAs method is configured to require a rooted path, and the path '9-2013/037a9ddf-7ffe-4131-b223-c4b5435d0fed.JPG' is not rooted.