Member 13512111 Ответов: 2

Как скачать любой файл на любое устройство и просмотреть его?


The below code is an API call in which I'm passing a documentID and I'm trying to open a document. Due to the fact that this whole process is running on a server I'm not able to view the file on any other device(be it another desktop or mobile device) although the file will open up in server machine but wont open locally. Can anyone please guide me through as to where I'm going wrong ? (sorry for the code, I know it might not be perfect as I'm new to web dev. still learning).


Что я уже пробовал:

{
        int i = 1;
        string key = ConfigurationManager.AppSettings["PhysicalDocumentPath"]; // some address like "xxx.xxx.xxx.xxx\folder\documents...."
        string key2 = ConfigurationManager.AppSettings["PhysicalDocumentPath2"]; // "C:\{somefolder}\{somefolder}...."
        JAppDoc value = new JAppDoc();
        var response = new Response();           
        try
        {
            if (!Directory.Exists(key2))
            {
                Directory.CreateDirectory(key2);
            }

            IAppDataService appDataService = new AppDataService();
            response = appDataService.GetDoc(docId, value);               

            var fileName = value.ApplicantId + "_" + value.DocumentName;
            var savefileName = fileName;
            var fileSavePath = Path.Combine(key, fileName);
            var prevPath = fileSavePath;
            var nextPath = fileSavePath;
            var tmp = fileName.Split('.');
            var tmp1 = tmp[0];                
            while (File.Exists(nextPath))
            {
                tmp = fileName.Split('.');                    
                fileName = tmp1 + i.ToString();
                fileName = fileName + "." + tmp[1];
                savefileName = fileName;                    
                nextPath = Path.Combine(key, savefileName);
                if (File.Exists(nextPath))
                {
                    prevPath = nextPath;
                }
                i++;
            }

            try
            {
                tmp = prevPath.Split(new[] { "Docs\\" }, StringSplitOptions.None);
                var serverpath = key + tmp[1];
                var localpath = key2+ tmp[1];
                if (File.Exists(localpath))
                {
                    Process.Start(localpath);
                }
                else
                {
                    System.IO.File.Copy(serverpath, localpath);
                    Process.Start(localpath);
                }
            }
           catch(Exception e)
            {
                Utils.Write(e);
                response.Message = "File not found !";                    
            }
        }
        catch (Exception ex)
        {
            Utils.Write(ex);
        }

        return Ok(response);
    }

F-ES Sitecore

Ваш код работает на сервере, поэтому вы можете получить доступ только к документам на сервере. Вы не можете получить доступ к файловой системе клиента, если это то, что вы хотите сделать. Вы можете получить доступ к сетевому ресурсу, например \\somecomputer\folder\file.doc но вам нужно будет изменить учетную запись, под которой работает ваш код в IIS, на учетную запись, имеющую необходимый доступ к сети.

Member 13512111

Я просто хочу просмотреть документ на стороне клиента, будь то мобильный телефон, ipad или настольный компьютер.
извините, что я не могу получить доступ . не могли бы вы рассказать об этом подробнее ?

2 Ответов

Рейтинг:
0

OriginalGriff

Серверный код обращается к серверным документам - клиентский код вообще не может получить доступ к клиентским файлам и не имеет прямого доступа к серверным файлам - вы должны загрузить файл клиенту, чтобы он мог просмотреть содержимое. И тогда вы получаете удовольствие от "Есть ли на этом компьютере программа, которая может читать этот тип файлов?" ...

Sever code не может прямо (или косвенно) заставить клиента открыть какой-либо файл - если вы подумаете об этом, это будет кошмар с точки зрения безопасности: вымогатели, которые открываются при посещении сайта, кто угодно?

Лучше всего преобразовать документ на сервере в HTML (и в зависимости от типа документа существуют конвертеры, которые сделают это) и представить его пользователю в виде веб - страницы, которую, как вы знаете, они могут просматривать.


Member 13512111

Прежде всего, спасибо за предыдущее предложение. Кстати, не могу ли я сделать что-то вроде возврата файла с сервера на клиентскую сторону(от api к контроллеру angularjs веб-страницы), чтобы просмотреть его ? или скачать файл на локальном компьютере, а затем просмотреть ? Или, может быть, открыть его в новой вкладке и просто просмотреть ? основной девиз - просмотр файла.

OriginalGriff

Вы можете скачать файл, но тогда это зависит от пользователя, что он с ним делает - вы не можете заставить его браузер открывать, просматривать, сохранять или даже не удалять его! И даже если вы это сделаете, нет никакой гарантии, что на любом устройстве, с которого он просматривает ваш сайт, есть приложение, которое может открыть документ. О единственном формате, который вы можете гарантировать, что он может просматривать ... HTML (хотя PDF подходит близко, но не все браузеры будут автоматически просматривать его).

Member 13512111

Итак, вы можете указать, как мне конвертировать файлы ? На данный момент нет никаких ограничений на тип файла, который может просматривать пользователь. Это может быть что угодно,например текст, изображение и т. д. Или просто как скачать файл ?

OriginalGriff

Нет никакого способа "конвертировать что - либо" - вам нужен (вероятно, конкретный) читатель для каждого типа исходного кода, который может создавать HTML.

Что именно ты пытаешься здесь сделать? Может быть, есть более простой способ решить всю проблему, чем идти этим маршрутом вообще.

Member 13512111

Я просто хочу открыть файл одним нажатием кнопки. Эта кнопка вызывается из контроллера angularJS(ajax call), который выполняет вызов API(IHTTPActionResult). Этот api-это то, откуда файл должен открываться/загружаться, а затем открываться все, что угодно.

Рейтинг:
0

Member 13512111

Цитата:
Ну то что я сделал это просто вернул полный путь файла от Api к контроллеру AngularJS и я использую условие

если (ответ.данных.сообщение != окна значение null).открыть('//'+ответ.данных.сообщение); иначе предупреждение("файл не найден !");

в части сообщения указан путь к файлу. При этом файл откроется в новой вкладке веб-браузера. Спасибо всем за Вашу поддержку . многому научиться.