Как записать изменения в файл HTML в файл и сохранить - PullRequest
0 голосов
/ 01 ноября 2019

Я провел некоторое исследование по этой теме, и примеры, которые я прошел, кажутся более старыми и не работают в текущей среде. Это 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();
        }

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