2017-11-11 35 views
8

Bir PDF dosyasını bir blob nesnesi olarak kullanıyorum. Kullanıcılarıma hizmet etmek istiyorum ve şu anda benim yaptığım:Tüm kullanıcılar için blob ve iyi bir dosya adı nasıl sunulur?

kendi içinde tarayıcı PDF aracı kullanmak isteyen kişiler için çalışıyor
html = '<iframe src="' + URL.createURL(blob) + '">'; 

.

Ancak, bazı kullanıcıların tarayıcılarını otomatik olarak PDF'leri indirecek şekilde ayarladılar. Bu kişiler için, indirilen dosyanın adı blob URL'sine dayalı olarak rastgele bir dizedir. Bu onlar için kötü bir deneyim.

ben de yapabilirim biliyorum:

<a href="blobURL" download="some-filename.pdf"> 

Fakat bu dosyayı indirmek için onları zorlar, çünkü tarayıcı içi PDF okuyucusu kullanmak isteyenler için kötü bir deneyimdir.

Herkesin iyi dosya isimlerine sahip olmasını ve herkesin PDF'yi istedikleri şekilde (tarayıcılarında veya işletim sistemindeki okuyucusunda) okumasına izin vermenin bir yolu var mı?

Teşekkür

+0

konuya referans ama: https://ux.stackexchange.com/questions/38574/force-a-pdf-download-vs-allowing-the-user-to-view-in- tarayıcı-ilk – Sgnl

cevap

3

kullanıcı PDF Viewer ne "Krom PDF Eklentisi" gösterecektir sonra window.navigator.plugins ("Chrome'da açmadan otomatik İndir PDF dosyaları yerine" seçeneğini kullanarak) devre dışı bırakması durumunda en azından, Google Chrome bakarak ne de "Chromium PDF Viewer". Seçenek varsayılan ayarda kalırsa, görüntüleyici eklenti listesinde görünecektir.

Bu yöntemin kullanılmasıyla, name s öğelerinden herhangi birinin, belirtilen eklentilerden biri olup olmadığını kontrol etmek için window.navigator.plugins kullanılabilir. Daha sonra, bu sonuca bağlı olarak, ya ya da <a href="blobUrl" download="file.pdf"> görüntüler. Diğer tarayıcılar için farklı yöntemlerin kullanılması gerektiğini hayal ediyorum. Ayrıca bazı makinelerin sahip olabileceği bir "Acrobat Reader" eklentisini veya hatta "PDF" kelimesini de kontrol edebilirsiniz.

Bir yan notta, varsayılan Firefox PDF görüntüleyicinin http://www.pinlady.net/PluginDetect/PDFjs/ kullanılarak etkinleştirilip etkinleştirilmediğinin algılanması gibi görünüyor.

Content-Disposition:

+0

'Window.navigator.plugins' Opera için de çalışıyor gibi görünüyor. – mlissner

+0

Bu FF eklenti dedektörüne baktık ve sadece * çok * hacky. Korkarım ki tek yol bu, ama umarım hala daha iyi bir yol var. – mlissner

1

deneyin ikili, meta veya http başlığına & dosya adı = thename.pdf eklemek için eki; filename = "thename.pdf"

+0

createObjectURL (blob) her zaman formun URL'sini döndürür BLOB: UUID –

+0

Bu konuda fazla bir şey yapamadık. Çalıştığımızın bir örneğini görmek isterdim, ama bizim için işe yaramıyor. – mlissner

0

createObjectURL (blob) belgelerini inceledim, her zaman benzersiz ve özel bir URL biçimi döndürecektir. Buradaki URL’yi değiştirmek mümkün değildir.

Eklenti, tarayıcılarda tutarlı değil.

Şimdi burada benim radikal bir fikir

  1. olduğunu bulun veya (yoksa) oluşturmak ve blob gelen sunucuya PDF dosyalarını kaydedebilen bir js kütüphanesi oluşturmak. Geçerli bir isim

  2. iframe'de yukarıdaki adını kullanmak sunucuya

  3. kaydet dosyası (ı 'jsPDF', 'pdfkit' gibi bazıları baktı ancak bunların hiçbiri damla kullanın).UX konuyla ilgili olarak

+0

Oldukça çılgın bir fikir. Denemek için yeterince çaresiz değiliz, ama bence haklısın - işe yarayacaktı. – mlissner

+1

@mlissner bu delilik! –

İlgili konular