Я провел некоторое исследование по этой теме, и примеры, которые я прошел, кажутся более старыми и не работают в текущей среде. Это ASP.Net MVC5.
У меня есть вызов ajax, который дает мне 3 строки. fileName, startTemplateUrl и html. FileName, как правило, является URL-адресом, но в конце мне нужно имя файла, а также его местоположение. Я использую это для санации имени файла.
private static string SanitizeFileName(string fileName)
{
string invalidChars = System.Text.RegularExpressions.Regex.Escape(new string(System.IO.Path.GetInvalidFileNameChars()));
string invalidRegStr = string.Format(@"([{0}]*\.+$)|([{0}]+)", invalidChars);
return System.Text.RegularExpressions.Regex.Replace(fileName, invalidRegStr, "_");
}
В моем действии Сохранить я хочу сохранить (строку html) в текущем документе. Примеры, которые я рассмотрел, используют
File.WriteAllLines(string, string);
Я не уверен, что это вообще что-то, потому что MVC не знает, что это такое. Я не думаю, что это сработает и для этого, потому что я не пишу .txt файл
Тогда был другой вариант, подобный этому
System.File.WriteAllText(string, string)
Это, похоже, тоже не существует. Я нашел из intellisense
System.IO.File.WriteAllLines(string, string)
Так что в моем примере ниже у меня есть это, но в настоящее время я получаю ошибку, что он не может преобразовать 'строку' в 'строку []'
Мне не нужно сохранять в таблицу базы данных, ни хочу для этого.
Есть ли кто-нибудь, кто может пролить свет на эту тему и, возможно, показать, как правильно реализовать это ..
МОЕ Действие текущего контроллера:
[HttpPost]
[ValidateInput(false)]
public ActionResult Save(string fileName, string startTemplateUrl, string html)
{
if (startTemplateUrl != null)
{
var starttemplateurl = SanitizeFileName(startTemplateUrl);
var content = starttemplateurl;
} else if (System.IO.File.WriteAllLines(fileName, html)){
File.WriteAllText(html);
}
var filename = SanitizeFileName(fileName);
if (System.IO.File.WriteAllLines(filename, html))
{
return Content(filename);
}
else
{
return Content("Error saving file", filename);
}
}
В основном то, что янужно сделать, это сохранить HTML в текущий файл. Необходимо только проверить startTemplateUrl, если он имеет значение null, и ничего не делать, если он очищает его, и сохранить его, в противном случае просто сохраните html в текущий очищенный файл.
Я также укажу, что в приведенной выше строке
} else if (System.IO.File.WriteAllLines(fileName, html)){
Где 'fileName' у меня действительно было 'content', это не понравилось, но это то, что действительно должно произойти.
Спасибо за вашу помощь!
Редактировать -
Я исправил это. Все еще нужно немного поработать, но пока работает отлично. Вот мое последнее действие контроллера ...
[HttpPost]
[ValidateInput(false)]
public ActionResult Save(string fileName, string startTemplateUrl, string html)
{
string filename = Path.GetFileName(fileName);
var lines = html;
var helper = (Server.MapPath("/Files/HMIBuilder/Default/"));
using (StreamWriter outputFile = new StreamWriter(Path.Combine(helper, filename)))
{
outputFile.WriteLine(lines);
return View();
}
}