2016-04-19 22 views
0

まず、DownloadManager、GCS java api、Android AsyncHttpClientを使用してGCSからダウンロードできます。しかし、生成されたファイルまたはファイルストリームにはヘッダーが含まれているため、ファイルが正しく開かれません。Google Cloud StorageからAndroidアプリにファイルを適切にダウンロードするにはどうすればよいですか?

DownloadManager/GCSのAPI/AndroidのAsynHttpClientで保存されたサンプルファイル:

--5tc52jlLclf7f49cCw5hDvB1BwmZZB 
Content-Disposition: form-data; name="example.pdf"; filename="example.pdf" 
Content-Type: application/octet-stream 
Content-Transfer-Encoding: binary 

%PDF-1.4 
%“Œ‹ž ReportLab Generated PDF document http://www.reportlab.com 
% 'BasicFonts': class PDFDictionary 
... 

入手可能であるか、または私はそれを持っていないので、私は適切にファイルを保存しようとしたライブラリのいずれかをどのように使うかどうライブラリ埋め込みヘッダ情報?好ましくは、ヘッダー情報を使用したいと思います。

ありがとうございます!

答えて

0

これは私のために働いているコードです。区切り文字として/ r/n/r/nを使用することができました。注意、AndroidHttp.newCompatibleTransport()を使用し、p12キーファイルを使用するようにStorageFactory.javaを変更しました。私のバージョンはhereとなりました。もし私が先週からの変更を追加していないのが分かったのならば。

  new AsyncTask<Void, Void, GoogleCredential>() { 
       @Override 
       protected GoogleCredential doInBackground(Void... view) { 
        try { 
         Storage storage = StorageFactory.getService(credential); 
         Storage.Objects.Get getObject = storage.objects().get(BUCKET_NAME, fileName); 
         // Downloading data. 
         ByteArrayOutputStream out = new ByteArrayOutputStream(); 
         getObject.getMediaHttpDownloader().setDirectDownloadEnabled(true); 
         getObject.executeMediaAndDownloadTo(out); 

         OutputStream outputStream = new FileOutputStream (
           getExternalFilesDir(Environment.DIRECTORY_DOWNLOADS).getAbsolutePath() 
             + "/" + fileName); 


         byte[] b = out.toByteArray(); 

         final byte[] delimiter = BaseEncoding.base16().lowerCase().decode("0d0a0d0a".toLowerCase()); 
         List<byte[]> byteArrays = new LinkedList<>(); 
         int begin = 0; 
         outer: 
         for (int i = 0; i < b.length - delimiter.length + 1; i++) { 
          for (int j = 0; j < delimiter.length; j++) { 
           if (b[i + j] != delimiter[j]) { 
            continue outer; 
           } 
          } 
          byteArrays.add(Arrays.copyOfRange(b, begin, i)); 
          begin = i + delimiter.length; 
          break; 
         } 
         byteArrays.add(Arrays.copyOfRange(b, begin, b.length)); 

         outputStream.write(byteArrays.get(1)); 
         outputStream.close(); 
         Log.i(LOG_TAG, "Created: " + 
           getExternalFilesDir(Environment.DIRECTORY_DOWNLOADS).getAbsolutePath() 
           + "/" + fileName); 

        } catch (GeneralSecurityException e) { 
         Log.e(LOG_TAG, "GCS Api fail: " + e); 
        } catch (IOException e) { 
         Log.e(LOG_TAG, "GCS Api fail: " + e); 
        } catch (NullPointerException e) { 
         Log.e(LOG_TAG, "GCS Api fail: " + e); 
        } 
        return credential; 
       } 
       @Override 
       protected void onPostExecute(final GoogleCredential credential) { 
        Log.i(LOG_TAG, "GCS completed."); 
        // Show file 

       } 
      }.execute(); 
関連する問題