【问题标题】:ASP MVC: how to save filesASP MVC:如何保存文件
【发布时间】:2025-12-02 07:35:01
【问题描述】:

在视觉工作室我有以下场景:

一个解决方案有两个项目:

  • 一个 Asp MVC 项目
  • 一个 Web Api 项目

在 Asp MVC 项目的控制器中,我想在文件系统中保存文件(上传)

  1. 我必须将文件保存在哪里?在 asp mvc 项目内的文件夹中?
  2. 可以将文件保存在 C:\ 文件系统的文件夹中。怎么做?

在 web api 项目中,我需要将 asp mvc 项目保存的图像发送给客户端。

  1. 如果图像位于 asp mvc 项目的文件夹中而不是 c:\ 文件系统中,我如何访问这些图像?

【问题讨论】:

  • 这与经典 ASP 无关。

标签: asp.net asp.net-mvc asp.net-web-api windows-server-2008


【解决方案1】:

我了解到您想保存图片,但不确定应该保存在哪里。如果问题是这样,

  1. 如果服务器不止一台,您需要将文件(图像)保存到数据库。因为,如果您将图像保存到服务器,其他人就无法访问它们。

  2. 如果只有一台服务器,您可以将它们存储到文件系统。但是,您需要存储有关图像的信息以便在需要时到达。因此,无论如何您都需要数据库。因此,将图像存储到数据库是一个不错的选择。

我认为this link 还可以帮助您将图像文件存储到文件系统和数据库中。

【讨论】:

    【解决方案2】:

    你可以试试这个:

    byte[] image = Convert.FromBase64String(pImage);
    string assemblyFolder = Path.GetDirectoryName(AppDomain.CurrentDomain.BaseDirectory);
    File.WriteAllBytes(assemblyFolder + @"\" + "fileName", image);
    

    【讨论】:

      【解决方案3】:
      1. 是的,只要您对文件夹具有写入权限,就可以将文件保存在项目中。

      2。 要将文件保存在位置表单控制器中,您可以执行以下操作; (在html端输入类型需要是文件)

      [HttpPost]
              public void UploadFile(HttpPostedFileBase file)
              {
                  if (file.ContentLength > 0)
                  {
                      var fileName = Path.GetFileName(file.FileName);
                      var path = Path.Combine(serverPath, fileName);
                      file.SaveAs(path);
                  }
              }
      
      1. 如果您从其他应用程序访问该文件,我的建议是将文件保存在一个公共文件夹(可能是公共网络文件系统)中。您可能有访问权限问题。

      【讨论】:

        【解决方案4】:

        是的,这是可能的
        第 1 步
        在您的控制器中创建任何名称的操作方法
        第 2 步
        编写以下代码

        公共 ActionResult 文件(HttpPostedFileBase 文件) { 尝试 { 字符串路径 = @"C:\File_Upload\"; 如果(文件!= null) { 文件.另存为(路径 + 文件.文件名); 返回视图(); } 别的 { 返回视图(); } } 捕捉(例外前) { 扔前; } }

        文件:是您的操作方法名称,您将文件保存在给定路径中
        HttpPostedFileBase

        HttpPostedFileBase 类是一个抽象类,包含与 HttpPostedFile 类相同的成员。 HttpPostedFileBase 类允许您创建类似于 HttpPostedFile 类的派生类,但您可以自定义这些派生类,并且可以在 ASP.NET 管道之外工作。 
        第 3 步
        创建用于存储输入文件的输入标签的视图
        在视图中编写以下代码
        view

        【讨论】: