Получение файла из "file: // A /" - PullRequest
0 голосов
/ 16 января 2019

Как я могу получить файл по внешнему пути так же, как "file://A/B/C/D/" На локальном компьютере у меня есть доступ к пути "file: //", но пользователь не имеет доступа. Теперь я хочу прочитать некоторые файлы из "file: // A / B / C / D /" и сделать доступными для загрузки пользователем.

Как я могу это сделать?

(текущий каталог "https://localhost:44331/")

public async Task<IActionResult> DownloadDocument(string berichtsnummer)
{
   var constantPath = "file://A/B/C/D/";
   using (FileStream fileStream = System.IO.File.OpenRead(constantPath))
   {

      MemoryStream memStream = new MemoryStream();
      memStream.SetLength(fileStream.Length);

     fileStream.Read(memStream.GetBuffer(), 0, (int)fileStream.Length);
     return File(fileStream, "application/octet-stream");
   }
}

когда я нажимаю ссылку для скачивания, я получаю эту ошибку:

"IOException: синтаксис имени файла, имени каталога или метки тома это неверно:" [IOException[1]

Вид пути "file: // A / B / C / D /":

File path

Ответы [ 2 ]

0 голосов
/ 17 января 2019

Важно изменить constantPath на "\\\\A\\B\\C\\D\\"

private string[] GetListOfDocumentLink()
{
   string path = string.Empty;
   string constantPath = "\\\\A\\B\\C\\D\\";

   string folderName = string.Empty;
   string year = string.Empty;
   // determine folderName and year.  

   path = constantPath
        + Path.DirectorySeparatorChar.ToString()
        + folderName
        + Path.DirectorySeparatorChar.ToString()
        + year;

        var filter = Berichtsnummer + "*.pdf";

        string[] allFiles = Directory.GetFiles(path, filter);
        return allFiles;
}

Теперь вы можете отправить path на DownloadDocument метод:

public async Task<IActionResult> DownloadDocument(string path)
{
   byte[] berichtData = null;
   FileInfo fileInfo = new FileInfo(path);
   long berichtFileLength = fileInfo.Length;
   FileStream fs = new FileStream(path, FileMode.Open, FileAccess.Read);
   BinaryReader br = new BinaryReader(fs);
   berichtData = br.ReadBytes((int)berichtFileLength);

   return File(berichtData, MimeTypeHelper.GetMimeType("pdf"));
}
0 голосов
/ 16 января 2019

Локальный путь к файлу не "file: //". Вы можете прочитать файл обычно используя локальный путь к файлу как

var path = "C:\\...";

, а затем отправить содержимое в браузер клиента.

Если файл находится не на локальном компьютере, доступ к нему возможен только через сетевой ресурс. Затем вы можете использовать UNC-пути, например

var path = @"\\Server\Path\...";
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...