我必须将文件保存到文件服务器,所以我需要将设置更改为,而不是保存在虚拟路径上,而是保存在物理路径上
通过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));
});
}