将文件上传到文件系统

本文关键字:文件系统 文件 | 更新日期: 2023-09-27 18:33:04

我已经看到了很多使用 MVC 上传文件的工作示例。

但是,我想遵循一种不同的方法,因此,我想要一些抽象,如下所示:

我想引入一个文件服务,并将其作为依赖项注入控制器。让服务上传文件并返回一个 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.

将文件上传到文件系统

重申评论中指出的内容:

如果要将虚拟路径映射到控制器外部的物理路径,则始终可以使用HostingEnvironment.MapPath方法。