Google云端硬盘上传文件并阅读文件

时间:2014-10-01 14:31:08

标签: java google-drive-api

.Net工作在java应用程序上的人

我上传时使用以下示例作为我的起点(我有这个工作)。这表明使用FileContent需要一个java.io.File,它不包含实际文件只有指向实际文件的指针。

我们正在从一个网站上传并试图插入到驱动器中,我更喜欢使用像.Net示例这样的内存Stream。我在查看FileContent类时看不到它。所以我的任务是:有没有办法在内存中的Google云端硬盘中插入文件,而不是先在硬盘上插入?

private static File insertFile(Drive service, String title, String description,
  String parentId, String mimeType, String filename) {
// File's metadata.
File body = new File();
body.setTitle(title);
body.setDescription(description);
body.setMimeType(mimeType);

// Set the parent folder.
if (parentId != null && parentId.length() > 0) {
  body.setParents(
      Arrays.asList(new ParentReference().setId(parentId)));
}

// File's content.
java.io.File fileContent = new java.io.File(filename);
FileContent mediaContent = new FileContent(mimeType, fileContent);
try {
  File file = service.files().insert(body, mediaContent).execute();

  // Uncomment the following line to print the File ID.
  // System.out.println("File ID: " + file.getId());

  return file;
} catch (IOException e) {
  System.out.println("An error occured: " + e);
  return null;
}
}

1 个答案:

答案 0 :(得分:0)

覆盖AbstractInputStream构建您自己的FileContent

package com;

import java.io.IOException;
import java.io.InputStream;
import com.google.api.client.http.AbstractInputStreamContent;
import com.google.api.client.util.Preconditions;

public class FileContent extends AbstractInputStreamContent {

private InputStream inputStream = null;
private long  inputLength = 0;

public FileContent(String type, InputStream pInputStream) throws IOException {
    super(type);
    this.inputStream = Preconditions.checkNotNull(pInputStream);        
    this.inputLength = this.inputStream.available();
}

public long getLength() throws IOException {
    return this.inputLength;
}

public boolean retrySupported() {
    return false;
}

@Override
public InputStream getInputStream() throws IOException {
    return this.inputStream;
}
}