PDF - это текстовый / закодированный беспорядок при загрузке с общего ресурса UNC (с использованием ASP.NET MVC 3 / IE 9) - PullRequest
0 голосов
/ 12 марта 2011

Я написал действие контроллера, которое проверяет наличие файла PDF, а затем возвращает файл (если он найден) в браузер для загрузки.

public ActionResult GetMyFile(string path)
{
    if (String.IsNullOrWhiteSpace(path)) { throw new ArgumentNullException("filename"); }

    string downloadFileName = System.IO.Path.GetFileName(path);
    // The worker process identity must have read access in both the file system and share
    // otherwise this always returns false.
    if (System.IO.File.Exists(path)) 
    {
        FilePathResult result = 
            File(path, System.Net.Mime.MediaTypeNames.Application.Pdf, downloadFileName);
        return result;
    }

    return Content("no file", "text-plain");
}

Все работает нормально, если путьПараметр ссылается на локальный путь на диске (например, "D:\MyFolder\MyFile.pdf"), но когда путь является путем UNC, файл PDF возвращается, но отображается в браузере как обычный текст.

Вот фрагмент этоговыглядит как ...

% PDF-1.3 1 0 obj << / длина 1409 / Filter / FlateDecode> поток X��� I�%&/m�{J�J��t�� $ ؐ @ ������� iG#) * ЕВА] е @ 흼 {{;?!? N '\ fdlJɞ ~ | "~ Q«IwOw: O 'дг | г / PtӃ:} Çк} 7q /> O> _9 g������Y��� |! {р ??����ܿ O����s�> ��� 'ڜ H������; ��D��> �� ���? ��? J��t�m��тСО (Ih ~ H7JLǎK% * 1012 T1 *. S = .F # ׷ wwzwǟҴ ~ х ~ Px | 3jc) f1 ��O�1�4�����b�qN̔>������跟j�jB?��݃ ����c��.���ڀ�^ofq�,�Pp���g��=Oo� ��7�}��פ�> ��m)}�~�W!�w��Q�0SR�3���2-���&-��Fhy�S�]���HiyF_��� �4�;Q��l�f��|]>ۍ�hc��C��64���|L�4�9Pξ�{#-�?��|���=1Tl��O�����݂6�����a֡�.fe΀:�����/��1��#�{���������?��|v��}�4�}Cw��!� & zv4Uj0 & - xiģ | =L9LnI7� & + �gʃ�; ��U� m�� M��.� ޏ� D�QvT��ϯ���f��� (��������0�������� {_������ui�Rid�6���u��a�� x"��m��{�o$��� � ����.��� enj@xu�8ӮR�����Ύ�r�� {�m�� $ ��O ��v���� = �������X! ~, E, �P����mf�2% 9 {��m����֍ b���8���ñ��: �PE��O <�e ~ jƄ� ߨ���? � Z��� <code>����"�Ǟ:����D��N�ߌ����PL��0��U����F4 g�oPW�Ml��#"�~ラ���_�����뾯���?���mG o������� = �bwGr/ б? t3 (т = [\ O + cresu0, Г.Ф.Qo\ S7q̘܀ ,. Wn $ Wm% 2ymdI <͑UeVA- | D ڵ дза /]J | ݾ '$ \ WR> л |.% agj0 |! {Rc ЛЖИ S?�� ^ SE����z��3�����hr� {��R "C� ݅ o��Ac� * T��Q��IE�6XP5ˮ�j4k��v� D��-�� endstream

Есть мысли о том, почему это может происходить?

Моя среда - это приложение ASP.NET MVC 3, работающее в IIS на Windows7. Клиент - Internet Explorer 9 RC, работающий на той же машине.

Путь UNC является общей папкой на той же машине, что и веб-сервер, и является тем же физическим местоположением, которое использовалось в «тесте локального пути»."(что успешно).

Для разрешений я гарантировал, что удостоверение рабочего процесса для моего пула приложений имеет разрешения Read как в файловой системе, так и через общий ресурс.

1 Ответ

0 голосов
/ 12 марта 2011

Я понял это.

Изменение окончательного оператора return с:

return Content("no file", "text-plain");

на

return null;

Кажется, это решило проблему.Хотя я не уверен, почему это так.Я думаю, что если бы первый return (в блоке , если ) был выполнен, то последний никогда бы не попал в кадр.

Я счастливпринять ответ другого человека, если он может объяснить почему . 1018 *

...