2014-01-28 7 views
1

Я провел дни, исследуя, и я не могу найти это. Есть ли способ загрузить blob, который уже был загружен в blobstore в Google, и загрузить его на мой диск. Я могу создавать новые документы, но не загружать уже существующие файлы из blobstore на диск пользователя. Я не могу использовать FileOutputStream в среде Google App Engine, и я не могу использовать URL-адрес загрузки blobstore, как кажется.Google Blobstore для Google Диска

ответ

0

Я предполагаю, что у вас есть токен доступа OAuth2. Если это так, что-то вроде следующего должно выполнить эту работу. Это требует чтения файла blob в массив байтов. Я не нашел способ делать потоковое вещание, поэтому, если файл большой, вам придется прибегнуть к написанию blob в дисковод.

import com.google.api.client.http.ByteArrayContent; 
import com.google.api.services.drive.Drive; 
import com.google.api.services.drive.model.File; 
import com.google.api.services.drive.model.ParentReference; 
import com.google.appengine.api.blobstore.BlobKey; 
import com.google.appengine.api.blobstore.BlobstoreService; 
import com.google.appengine.api.blobstore.BlobstoreServiceFactory; 

// creates the credential object from the OAuth2 Access Token 
GoogleCredential credential = new GoogleCredential.Builder() 
    .setTransport(TRANSPORT).setJsonFactory(JSON_FACTORY) 
    .setClientSecrets(clientSecrets.getWeb().getClientId(), clientSecrets.getWeb().getClientSecret()) 
    .build(); 
credential.setAccessToken(accessToken); 

Drive drive = Drive.Builder(TRANSPORT, JSON_FACTORY, credential) 
     .setApplicationName(APPLICATION_NAME).build(); 
BlobstoreService blobstoreService = BlobstoreServiceFactory.getBlobstoreService(); 


// reads the blobstore file into a byte array 
BlobKey blobKey = new BlobKey(blobKeyStr); 
byte[] blobBytes = blobstoreService.fetchData(blobKey, 0, BlobstoreService.MAX_BLOB_FETCH_SIZE-1); 

// creates the google drive file 
String parentId = ...; // find the parent reference for the google drive file 
File file = new File(); 
file.setMimeType(mimeType); 
file.setTitle(...); 
file.setParents(Arrays.asList(new ParentReference().setId(parentId))); 
drive.files().insert(file, new ByteArrayContent(mimeType, blobBytes)).execute(); 
Смежные вопросы