Мне придется сохранить файлы на файловом сервере, поэтому мне нужно будет изменить настройки, вместо того, чтобы сохранять на виртуальном пути, сохраняя на физическом пути
Через 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));
});
}