ASP.NET - FileUpload - Изменить виртуальный путь на физический путь с помощью WebConfig - PullRequest
0 голосов
/ 26 июня 2019

Мне придется сохранить файлы на файловом сервере, поэтому мне нужно будет изменить настройки, вместо того, чтобы сохранять на виртуальном пути, сохраняя на физическом пути

Через 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));

                });

            }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...