Google api 驱动器V3 API:java.lang.IllegalArgumentException

Google api 驱动器V3 API:java.lang.IllegalArgumentException,google-api,google-drive-api,Google Api,Google Drive Api,以下是我如何从文件的inputstream创建“AbstractInputStreamContent”: final Long length = Long.valueOf(filesData.get(uploadedFileName).get("size")).longValue(); final InputStream fileStream = item.openStream(); //FileItemStream item AbstractInputStreamContent

以下是我如何从文件的inputstream创建“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;
        }
    };
“输入流内容”为:

要用我使用的新文件替换旧文件(两个文件均为.docx格式),请执行以下操作:

无论我使用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)
java.lang.IllegalArgumentException
在com.google.api.client.repackaged.com.google.common.base.premissions.checkArgument(premissions.java:111)上
位于com.google.api.client.util.premissions.checkArgument(premissions.java:37)
在com.google.api.client.googleapis.media.MediaHttpUploader.setInitiationRequestMethod(MediaHttpUploader.java:872)上
位于com.google.api.client.googleapis.services.AbstractGoogleClientRequest.initializeMediaUpload(AbstractGoogleClientRequest.java:237)
在com.google.api.services.drive.drive$Files$Update上(drive.java:3163)
位于com.google.api.services.drive.drive$Files.update(drive.java:3113)
位于com.util.DocumentsUtil.updateFile(DocumentsUtil.java:22)
位于com.controllers.collab.documents.documents.fileUpload(documents.java:165)
在sun.reflect.NativeMethodAccessorImpl.invoke0(本机方法)处
在sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)中
在sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)中
位于java.lang.reflect.Method.invoke(Method.java:44)
位于org.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:221)
位于org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:136)
位于org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:110)

通过将google api客户端从每个google api maven依赖项中排除,解决了这个问题。后来从sonatype repo中添加了google-api-client-1.22.0-SNAPSHOT依赖项。它很好用

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();
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)