Podgląd w oknie przeglądarki [ASP.NET]


(szydera_) #1

Witam,

chciałbym zrobić podgląd różnych plików (pdf, doc, jpg) bezpośrednio w oknie przeglądarki. Potrzebny będzie pewnie odpowiedni typ MIME. Czytałem że są one sprawdzane najsprawniej po prostu na podstawie rozszerzenia... czy na pewno jest do dobra metoda?

Jeśli już będę miał ten typ, to jak najlepiej dalej postąpić? Nie wiem jak w zależności od typu zrobić taki podgląd... żeby to ładnie i dobrze wyglądało. Może jakąś sugestię dostanę? Z góry dziękuję :wink:


(Tomek Matz) #2

Jeśli pliki będziesz miał na serwerze i będą one tworzone przez Ciebie, to nie widzę potrzeby sprawdzania typu mime. Wówczas wystarczy, że sprawdzisz rozszerzenie. Jeśli pliki będą uplodowane przez użytkowników to już inna historia. Wówczas najpierw powinieneś sprawdzić, czy rozszerzenie pliku to jedno z tych trzech dopuszczalnych. Następnym krokiem jest sprawdzenie, czy użytkownik czasem nie podmienił rozszerzenia na jedno z tych trzech dopuszczalnych. I tutaj pojawia się konieczność sprawdzenia typu mime na podstawie zawartości pliku. Jak to zrobić może znajdziesz tutaj: http://stackoverflow.com/questions/58510/using-net-how-can-you-find-the-mime-type-of-a-file-based-on-the-file-signature. Ja tego nie robiłem, więc nie wiem, czy to zadziała.

Jeśli chodzi o wyświetlanie ... znalazłem przykład, w którym pdf wyświetlany jest w iframe http://www.beansoftware.com/ASP.NET-Tutorials/PDF-View-Custom-Control.aspx. Niby działa. Pytanie co się stanie jeśli użytkownik nie będzie miał wtyczki w przeglądarce umożliwiającej wyświetlanie pdf-ów ? (nie sprawdzałem). Jeśli chodzi o doc-i to sprawa się kompikuje. Znalazłem kod, w którym gość pokazuje jak skonwertować doc do html-a http://www.c-sharpcorner.com/UploadFile/munnamax/WordToHtml03252007065157AM/WordToHtml.aspx. Mógłbyś zerknąć na ile to zadziała. Jeśliby się okazało, że działa to dobrze, to wówczas mógłbyś też pomyśleć nad konwersją pdf-a do html-a. Wówczas miałbyś bardziej jednolite rozwiązanie, czyli pdf->html, doc->html i wyświetlasz html. Ale to wszystko to niesprawdzone pomysły będące rezultatem googlowania. Na ile to zadziała to nie wiem. Może ktoś się wypowie, kto coś takiego robił. Sam jestem ciekaw jak możnaby to najlepiej rozwiązać.


(szydera_) #3

Może jednak chciałbym prościej.

Tzn jeśli będzie to jakiś plik z obrazkiem to niech zapełni całe nowe okno.

Jeśli .doc nie sobie śmiało otworzy jakiś edytor tekstowy.

W przypadku .pdf Adobe Reader...

Na razie właśnie z czymś takim mam problem. To co mi przedstawiłeś będzie pewnie w przyszłości :slight_smile:


(Tomek Matz) #4

a coś takiego próbowałeś:

Wyświetl pdf
Wyświetl docx
Wyświetl png

(szydera_) #5

Właśnie coś takiego chcę zrobić, ale to już nie dzisiaj. Mam nadzieję, że taki myk wystarczy :stuck_out_tongue: Btw dzięki za kolejną pomoc ;>


(somekind) #6

Najbezpieczniej sprawdzić zawartość pliku, konkretnie jego sygnaturę. Np. dla plików jpg trzy pierwsze bajty to: ff d8 ff, a dla PDF: 25 50 44 46. Generalnie wszystko jest w specyfikacji formatu. Z doc będzie gorzej, bo raczej trudno o jego specyfikację.


(Tomek Matz) #7

To zadziała w ten sposób (a przynajmniej powinno), że png i pdf wyświetlą się w osobnym oknie. PDF zostanie otwarty przy użyciu wtyczki do przeglądarki, którą użytkownik ma u siebie zainstalowaną do otwierania plików tego typu (niekoniecznie musi to być adobe reader). Natomiast jeśli chodzi o plik doc to użytkownik zostanie zapytany, czy chce go zapisać na dysku.

Tak też sądziłem, ale nie miałem 100% pewności, więc wolałem nie pisać :slight_smile:

Ciekawy sposób. Jak będę miał chwilę to się temu bliżej przyjrzę. Tymczasem trafiłem na taki link http://www.garykessler.net/library/file_sigs.html. Są tam niby zapisy poszczególnych bajtów dla plików doc i docx. I teraz nie rozumiem, czy to jest to samo, o czym mówisz, czy tez może czegoś tam nie rozumiem.

I jeszcze cytat z tej strony "Interpret the table as the magic number generally indicating the file type rather than the file type always having the given magic number."


(somekind) #8

Tak, o to mi chodzi.