2012-06-26 10 views
7

Blobstore'umda depolanan lekeler var ve bu dosyaları Google Drive'a göndermek istiyorum. Ben Google App Engine UrlFetchService kullandığınızdaBüyük bir dosyayı (> 5 mb) Blobstore'dan Google Drive'a nasıl gönderilir?

URLFetchService fetcher = URLFetchServiceFactory.getURLFetchService(); 
URL url = new URL("https://www.googleapis.com/upload/drive/v1/files"); 
HTTPRequest httpRequest = new HTTPRequest(url, HTTPMethod.POST); 
httpRequest.addHeader(new HTTPHeader("Content-Type", contentType)); 
httpRequest.addHeader(new HTTPHeader("Authorization", "OAuth " + accessToken)); 
httpRequest.setPayload(buffer.array()); 
Future<HTTPResponse> future = fetcher.fetchAsync(httpRequest); 
try { 
    HTTPResponse response = (HTTPResponse) future.get(); 
} catch (Exception e) { 
    log.warning(e.getMessage()); 
} 

Sorun: dosya 5 mb aştığında, bu UrlFetchService isteği boyutuna sınırını aşan (Bağlantı: https://developers.google.com/appengine/docs/java/urlfetch/overview#Quotas_and_Limits)

Alternatif: kullanma Bu çözüm ile

File body = new File(); 
body.setTitle(title); 
body.setDescription(description); 
body.setMimeType(mimeType); 

// File's content. 
java.io.File fileContent = new java.io.File(filename); 
FileContent mediaContent = new FileContent(mimeType, fileContent); 

File file = service.files().insert(body, mediaContent).execute(); 

Sorun: Google Drive API'sı Bu kodu vardır FileOutputStream, Blobstore'dan okunan byte [] öğesini yönetmek için Google App Engine'de desteklenmez.

Herhangi bir fikrin var mı?

cevap

6

Bunu yapmak için, yeniden başlatmayı 5 megabayttan küçük parçalarla yükleyin. Bu, Google API Java için Drive İstemcisi'nde yapılması kolaydır. Burada, sağladığınız Drive kodundan uyarlanmış bir kod örneği var.

File body = new File(); 
body.setTitle(title); 
body.setDescription(description); 
body.setMimeType(mimeType); 

java.io.File fileContent = new java.io.File(filename); 
FileContent mediaContent = new FileContent(mimeType, fileContent); 

Drive.Files.Insert insert = drive.files().insert(body, mediaContent); 
insert.getMediaHttpUploader().setChunkSize(1024 * 1024); 
File file = insert.execute(); 

fazla bilgi için, ilgili sınıflar için javadocs bkz: my Sürücü kodunu adapte etmek için

+0

teşekkürler. Uygulamamı, tekrar yüklenebilen yüklemeden yararlanarak güncelliyorum. Google App Engine için bu kodu yükledikten sonra alıyorum java.lang.NoSuchMethodError: com.google.api.services.drive.Drive $ Dosyalar $ Insert.getMediaHttpUploader() Lcom/google/API/istemci/googleapis/MediaHttpUploader; Biraz daha araştırmam gerek ... – Martin

+0

Hangi versiyonda google-api-java-client var? En yeni mi? Bakın: http://code.google.com/p/google-api-java-client/ –

+0

Teşekkürler Vic! Kullanılan tüm API kitaplıklarını güncelledikten sonra sağladığınız kod gayet iyi çalışıyor! – Martin

İlgili konular