«Не удалось найти часть пути» Ошибка при операции чтения файла в Azure WebApp - PullRequest
0 голосов
/ 01 ноября 2018

У меня есть MVC application, в котором есть кнопка обзора. Я выбираю файл в любом месте и читаю содержимое файла, используя путь, а затем обрабатываю содержимое.

Хорошо работает на локальном компьютере, но при публикации в Azure в качестве очевидного веб-приложения не удалось получить путь к файловой системе, но как с этим справиться?

Не удалось найти файл 'D: \ Windows \ system32 \ mydata.json'.

Index.cshtml

 <label>File Path</label>
    <table>
      <tr>
        <td>@Html.TextBoxFor(m => m.filePath, new { type = "file", @class = "input-file" }) )</td>
        <td>&nbsp;&nbsp;</td>

      </tr>
    </table>

HomeController.cs

private static void Test(string filepath)
        {
            string data = System.IO.File.ReadAllText(filepath);
            JArray array = JArray.Parse(data);

Ответы [ 2 ]

0 голосов
/ 02 ноября 2018

Вы пытаетесь прочитать файл, который на клиентском компьютере в коде, который выполняется на сервере . Это не сработает. Ваш сервер не имеет доступа к файлам на клиентском компьютере. Что хорошо ?

Посмотрите на HttpPostedFileBase для загрузки файлов.

0 голосов
/ 02 ноября 2018

В Azure текущим рабочим каталогом процесса является D:\Windows\system32\, попробуйте var wholePath = Path.Combine(Server.MapPath("~/"), filepath);, чтобы найти файлы в корневом веб-каталоге.

Обновление

Добавьте HttpPostedFileBase поле к вашей модели. В вашем представлении измените на m => m.File.

public class FileModel 

{
    public HttpPostedFileBase File { get; set; }
}

В контроллере

public ActionResult FileUpload(FileModel fileModel)
{
    if (ModelState.IsValid)
    {
         StreamReader s = new StreamReader(fileModel.File.InputStream);
         JArray array = JArray.Parse(s.ReadToEnd());
         ...
     }
     return View();
}
...