Файл FileStream записывается в папку пользователя, но как показать его как загруженный файл в браузере? - PullRequest
0 голосов
/ 06 апреля 2020

Я использовал код из официальной Документации Microsoft для чтения содержимого из файлового потока на сервере и загрузки его по пути от пользователя.

На странице X я сохраните файл Excel в папке сервера, затем я сохраню путь к этому файлу в переменной сеанса, а затем выполню код JavaScript, чтобы открыть страницу «загрузки» на новой вкладке. В основной функции этой страницы приведен код ниже. Код загружает файл просто отлично, он появляется в папке «Загрузки» пользователя, но проблема в том, что пользователь не получает приглашение загрузки браузера. Как и в Chrome, вы получаете панель загрузки в нижней части браузера, а затем вы можете нажать на загруженный файл, и он откроется. Как мне отредактировать мой код, чтобы он отображал загруженный файл в загружаемой части браузера?

Простите за мой английский sh, это не мой родной язык.

Это код:

    if (Session["doc"] != null) {
        string pathSource = Session["doc"].ToString();
        string downloadFolderPath = Microsoft.Win32.Registry.GetValue(@"HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders", "{374DE290-123F-4565-9164-39C4925E467B}", String.Empty).ToString();
        string pathNew = downloadFolderPath + "\\" + Path.GetFileName(pathSource);

        try {
            if (Response.IsClientConnected) {
                // Source file:
                using (FileStream fsSource = new FileStream(pathSource, FileMode.Open, FileAccess.Read, FileShare.Read)) {

                    // Read the source file into a byte array.
                    byte[] bytes = new byte[fsSource.Length];
                    int numBytesToRead = (int)fsSource.Length;

                    int numBytesRead = 0;
                    while (numBytesToRead > 0) {
                        // Read may return anything from 0 to numBytesToRead.
                        int n = fsSource.Read(bytes, numBytesRead, numBytesToRead);

                        // Break when the end of the file is reached.
                        if (n == 0)
                            break;

                        numBytesRead += n;
                        numBytesToRead -= n;
                    }
                    numBytesToRead = bytes.Length;

                    // Write the byte array to the other FileStream.
                    //  File in the downloads folder: 
                    using (FileStream fsNew = new FileStream(pathNew, FileMode.Create, FileAccess.Write, FileShare.Read)) {
                        fsNew.Write(bytes, 0, numBytesToRead);
                    }
                }

            }
        }
        catch (FileNotFoundException ioEx) {
            Console.WriteLine(ioEx.Message);
        }
    }
...