ASP.NET-FileUpload-使用WebConfig将虚拟路径更改为物理路径

时间:2019-06-26 13:35:11

标签: c# asp.net-mvc file-upload

我必须将文件保存到文件服务器,所以我需要将设置更改为,而不是保存在虚拟路径上,而是保存在物理路径上

通过webConfig,我将保存文件的路径传递给控制器​​,但是当传递物理路径时,例如:C:\ Users \ bwm6 \ Desktop \ temp,返回错误,即虚拟路径是预期的,而不是物理的

我在webConfig中具有该配置:

<add key="TempUploadFolder" value="~/content/upload/temp"/>
<add key="FinalUploadFolder" value="~/content/images/apontamento"/>

这就是我保存在临时文件夹中的控制器:

public JsonResult SaveTempFiles()
        {
             //get the path from the WebConfig
            _CaminhoRaizTempUpload = Server.MapPath(ConfigurationManager.AppSettings.Get("TempUploadFolder"));
            string fileName = string.Empty;
            List<string> arquivosSalvos = new List<string>();
            try
            {
                foreach (string file in Request.Files)
                {
                    var fileContent = Request.Files[file];
                    if (fileContent != null && fileContent.ContentLength > 0)
                    {
                        var stream = fileContent.InputStream;
                        var extension = Path.GetExtension(fileContent.FileName);
                        fileName = Path.GetFileName(fileContent.FileName) + DateTime.Now.ToString().Replace(":", "-").Replace("/", "-").Replace(" ", "_") + extension;
                        var path = Path.Combine(this._CaminhoRaizTempUpload, fileName);
                        using (var fileStream = System.IO.File.Create(path))
                        {
                            stream.CopyTo(fileStream);
                            arquivosSalvos.Add(fileName);
                        }
                    }
                }
            }
          }

最后在该控制器中保存文件:

 [HttpPost]
    public JsonResult SaveInfo()
    {
        try
        {
            var model = JsonConvert.DeserializeObject<ApontamentoViewModel>(Request.Form["model"]);
            if (!string.IsNullOrWhiteSpace(model.filePath))
            {
                //convert to list
                var listArquivos = model.CaminhoArquivo.Split(';').Distinct().ToList();

                //for each file in the list, move from temporary folder to final folder
                model.filePath= string.Join(";", listArquivos);


                string caminhoRaiz = Server.MapPath(System.Configuration.ConfigurationManager.AppSettings.Get("FinalUploadFolder"));
                _CaminhoRaizTempUpload = Server.MapPath(System.Configuration.ConfigurationManager.AppSettings.Get("TempUploadFolder"));

                var files = Directory.EnumerateFiles(_CaminhoRaizTempUpload, "*.*", SearchOption.AllDirectories)
                                 .Where(s => listArquivos.Any(arquivo => s.Contains(arquivo)))
                                 .ToList();


                files.ForEach(arquivoMover =>
                {
                    var nomeArquivo = System.IO.Path.GetFileName(arquivoMover);
                    System.IO.File.Move(arquivoMover, System.IO.Path.Combine(caminhoRaiz, nomeArquivo));

                });

            }

0 个答案:

没有答案