2011-03-10 13 views
7

ben bir PDF dosyası almaya çalışıyorum:ikili veri olarak PDF dosyasını getirilemiyor

URL: https://domain_name/xyz/_id/download/

doğrudan bir pdf dosyası için değil puan yapar ve her benzersiz dosya indirilen alır neyin Belirli bir < _id> alanını yorumlar. Ben HTTPsURLConnection olması gerektiği ise onun Content-Type 'text/html' şeklinde olduğu bunu almaya çalıştığınızda

ben anında süre indirilen alır tarayıcısı ve Pdf dosyasının adres çubuğuna bu bağlantıyı koymak 'uygulama/pdf' içinde.

Bağlanmadan önce 'setRequestProperty' öğesini 'application/pdf' olarak denedim ancak dosya her zaman 'text/html' biçiminde indirildi. Bunun için kullanıyorum

Yöntem)

1 'GET: çünkü ben HttpClient yerine HttpsURLConnection kullanımına gerek var mı?

2) Güvenliği artırmak için bu tür bağlantılar kullanılıyor mu?

3) Lütfen hatalarımı belirtin.

4) Sunucuda bulunan dosya adını nasıl bilebilirim?

Ben ben uyguladık ana kodları aşağıda yapıştırma: Ben çok araştırdım ve sonuç elde edemedik

URL url = new URL(sb.toString()); 

    //created new connection 
    HttpsURLConnection urlConnection = (HttpsURLConnection) url.openConnection(); 

    //have set the request method and property 
    urlConnection.setRequestMethod("GET"); 
    urlConnection.setDoOutput(true); 
    urlConnection.setRequestProperty("Content-Type", "application/pdf"); 

    Log.e("Content Type--->", urlConnection.getContentType()+" "+ urlConnection.getResponseCode()+" "+ urlConnection.getResponseMessage()+"    "+urlConnection.getHeaderField("Content-Type")); 

    //and connecting! 
    urlConnection.connect(); 

    //setting the path where we want to save the file 
    //in this case, going to save it on the root directory of the 
    //sd card. 
    File SDCardRoot = Environment.getExternalStorageDirectory(); 

    //created a new file, specifying the path, and the filename 

    File file = new File(SDCardRoot,"example.pdf"); 

    if((Environment.getExternalStorageState()).equals(Environment.MEDIA_MOUNTED_READ_ONLY)) 

    //writing the downloaded data into the file we created 
    FileOutputStream fileOutput = new FileOutputStream(file); 

    //this will be used in reading the data from the internet 
    InputStream inputStream = urlConnection.getInputStream(); 

    //this is the total size of the file 
    int totalSize = urlConnection.getContentLength(); 

    //variable to store total downloaded bytes 
    Log.e("Total File Size ---->", ""+totalSize); 
    int downloadedSize = 0; 

    //create a buffer... 
    byte[] buffer = new byte[1024]; 
    int bufferLength = 0; //used to store a temporary size of the buffer 

    //Reading through the input buffer and write the contents to the file 
    while ((bufferLength = inputStream.read(buffer)) > 0) { 

     //add the data in the buffer to the file in the file output stream (the file on the sd card 
     fileOutput.write(buffer, 0, bufferLength); 


     //adding up the size 
     downloadedSize += bufferLength; 

     //reporting the progress: 
     Log.e("This much downloaded---->",""+ downloadedSize); 

    } 
    //closed the output stream 
    fileOutput.close(); 

. Mümkünse lütfen bu olayını ilk defa uygularken hatamı ayrıntılandırmaya çalışın.

** gibi doğrudan pdf bağlantılarınız alınırken çalıştı: http://labs.google.com/papers/bigtable-osdi06.pdf ve dahası onların 'Content-Type' da 'application/pdf' **

sayesinde oldu, kolayca indirilen olsun.

+0

Sunucuyla yanıt veren MIME türünü kontrol ettiniz mi? –

cevap

1

Bu iş parçacığı benim sorunumun çözümüne yönlendirdi! WebView'den bir akışlı PDF indirmeye çalıştığınızda ve bir HttpURLConnection kullandığınızda, tanımlama bilgilerini Web görünümünden de geçirmeniz gerekir.

String cookie = CookieManager.getInstance().getCookie(url.toString()); 
if (cookie != null) connection.setRequestProperty("cookie", cookie); 
1

Teori 1: Sunucu yanıt olarak yanlış İçerik türü ile yanıt veriyor. Sunucu kodu yazılır ve sizin tarafınızdan dağıtılırsa, bunu kontrol edin.

Teori 2: URL, içinde gerçek pdf dosyasının URL'sine yönlendiren bir javascript içeren bir html sayfası döndürüyor.

+0

Açmaya çalıştığım URL'nin web sayfası içinde gömülü pdf dosyalarını gösterdiği bazı satır içi pdf oluşturma işlemleri var. Sence bu bir sorun olabilir mi? Nedeni, Firefox tarayıcısını kullandığımda, onu WebPage içinde oluşturuyor ancak bu bağlantıyı Chrome Browser'da açtığımda dosyayı indiriyor. Yani, 'html/text' almak yerine pdf'yi ikili olarak almak için veya sunucu tarafında yapılması gereken değişikliklerin yapılması için yapabileceğim bir şey var mı? Sunucu kodunu dağıtmadım. – iabhi

+0

@ al-sutton @nishan FireBug aracılığıyla kontrol ettim, uygulamayı/pdf nesnesini gösterir. Yani, bir web sayfasındaki gömülü pdf'ye erişmek için biraz değişiklik yapmam gerekiyor. – iabhi

+0

Ayrıca, pdf dosyasının tam boyutunu indirebiliyorum, ancak 'text/html' yerine 'application/pdf' olarak almak yerine "text/html dosya türünü açamadı" ifadesini kullandı. – iabhi