Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-mvc/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 将文件上载到文件系统_C#_Asp.net Mvc_Asp.net Mvc 3_Asp.net Mvc 4 - Fatal编程技术网

C# 将文件上载到文件系统

C# 将文件上载到文件系统,c#,asp.net-mvc,asp.net-mvc-3,asp.net-mvc-4,C#,Asp.net Mvc,Asp.net Mvc 3,Asp.net Mvc 4,我见过很多用MVC上传文件的工作 但是,我想采用一种不同的方法,这样,我需要一点抽象,如下所示: 我想引入一个文件服务,并将其作为依赖项注入控制器。让服务上载文件并返回UploadedFile对象 我现在遇到的一个问题是上传到文件系统或应用程序根目录中的正确位置/目录 在控制器中,我可以访问Server对象,我可以调用Server.MapPath,它发挥了神奇的作用,下面我无法访问该对象,因为它不是控制器 我如何上传到文件系统中的任何地方或下面的项目根目录中 public class FileS

我见过很多用MVC上传文件的工作

但是,我想采用一种不同的方法,这样,我需要一点抽象,如下所示:

我想引入一个文件服务,并将其作为依赖项注入控制器。让服务上载文件并返回UploadedFile对象

我现在遇到的一个问题是上传到文件系统或应用程序根目录中的正确位置/目录

在控制器中,我可以访问
Server
对象,我可以调用
Server.MapPath
,它发挥了神奇的作用,下面我无法访问该对象,因为它不是
控制器

我如何上传到文件系统中的任何地方或下面的项目根目录中

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;
    }
错误是:
将SaveAs方法配置为需要根路径,路径“9-2013/037a9ddf-7ffe-4131-b223-c4b5435d0fed.JPG”未根路径。
重新说明注释中的内容:


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

重新说明注释中的注释:


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

您的意思是无法访问
服务器
对象?如果需要将虚拟路径映射到控制器外部的物理路径,您可以使用方法。
HttpContext.Current.Server
?@PatrykĆwiek希望将其作为答案。我接受。你的意思是你不能访问
服务器
对象?如果你需要将虚拟路径映射到控制器外部的物理路径,你可以使用方法。
HttpContext.Current.Server
?@PatrykĆwiek想把它写下来作为答案。我接受。