Drive V3 API:java.lang.IllegalArgumentException

时间:2016-04-14 06:55:51

标签: google-api google-drive-api

这是我从file:

的输入流创建“AbstractInputStreamContent”的方法
final Long length = Long.valueOf(filesData.get(uploadedFileName).get("size")).longValue();
    final InputStream fileStream = item.openStream(); //FileItemStream item
    AbstractInputStreamContent fileContent = new AbstractInputStreamContent(uploadedFileMimeType) {
        @Override
        public boolean retrySupported() {
            return false;
        }
        @Override
        public long getLength() throws IOException {
            return length;
        }
        @Override
        public InputStream getInputStream() throws IOException {
            return fileStream;
        }
    };

并且“InputStreamContent”为:

InputStreamContent fileContent = new InputStreamContent(uploadedFileMimeType, item.openStream());
fileContent.setLength(Long.valueOf(filesData.get(uploadedFileName).get("size")).longValue());

用我使用的新文件替换旧文件(两个文件都是.docx格式):

Drive.Files.Update update = driveService.files().update(fileIdOfFileToReplace,fileMeta,fileContent);
        update.set("uploadType", "resumable");
        update.getMediaHttpUploader().setDirectUploadEnabled(false);
        update.getMediaHttpUploader().setChunkSize(MediaHttpUploader.DEFAULT_CHUNK_SIZE);
        File updatedFile = update.execute();

无论是使用InputStreamContent还是AbstractInputStreamContent,上传新文件都可以正常工作。 但更新会给出“java.lang.IllegalArgumentException”

java.lang.IllegalArgumentException
    at com.google.api.client.repackaged.com.google.common.base.Preconditions.checkArgument(Preconditions.java:111)
    at com.google.api.client.util.Preconditions.checkArgument(Preconditions.java:37)
    at com.google.api.client.googleapis.media.MediaHttpUploader.setInitiationRequestMethod(MediaHttpUploader.java:872)
    at com.google.api.client.googleapis.services.AbstractGoogleClientRequest.initializeMediaUpload(AbstractGoogleClientRequest.java:237)
    at com.google.api.services.drive.Drive$Files$Update.<init>(Drive.java:3163)
    at com.google.api.services.drive.Drive$Files.update(Drive.java:3113)
    at com.util.DocumentsUtil.updateFile(DocumentsUtil.java:22)
    at com.controllers.collab.documents.Documents.fileUpload(Documents.java:165)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:44)
    at org.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:221)
    at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:136)
    at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:110)

1 个答案:

答案 0 :(得分:0)

通过从每个google api maven依赖项中排除google-api-client解决了这个问题。后来从sonatype repo添加了google-api-client-1.22.0-SNAPSHOT依赖。它工作正常