1

Android で Documents List API を使用して Google Docs/Drive にファイルをアップロードしようとしています。

問題は、問題はないように見えますが (ステータス コード 200、OK が表示されます)、ドキュメントを表示してもファイルが表示されないことです。フィードを一覧表示するときに取得するこのアドレスにアップロードします: https://docs.google.com/feeds/upload/create-session/default/private/full?convert=false

私はいくつかの方法を試しましたが、運が悪い場合は次のようになります。

File file = new File(sFile); // Path to the file on the SD card

InputStreamContent content = new InputStreamContent("application/vnd.mymimetype",
                    new BufferedInputStream(new FileInputStream(file)));

content.setLength(file.length());
HttpRequest request = transport.createRequestFactory().buildPostRequest(new GoogleUrl(sURL), content); // Urls is https://docs.google.com/feeds/upload/create-session/default/private/full?convert=false

GoogleHeaders headers = getDefaultHeaders(); // Set version 3 and authentication

request.setHeaders(headers);
res = request.execute(); // Will have status code 200, not 201 as created and no entity returned?

MediaUploader でも試してみましたが、同じ結果になりました (この例ではメタデータを設定しましたが、コンテンツの長さが設定されていないという例外が発生したと思われるため、実際の例ではメタデータを設定していません):

StringBuilder sAtom = new StringBuilder()
                    .append("<?xml version='1.0' encoding='UTF-8'?>")
                    .append("<entry xmlns=\"http://www.w3.org/2005/Atom\" xmlns:docs=\"http://schemas.google.com/docs/2007\">")
                    .append("<title>THeFile</title>").append("</entry>");
 String sCmd = sAtom.toString();
 InputStream inStream = null;

 inStream = new ByteArrayInputStream(sCmd.getBytes("UTF-8"));

 final InputStreamContent oContent = new InputStreamContent("application/atom+xml", inStream);
 oContent.setLength(sCmd.length());

 InputStreamContent mediaContent = new InputStreamContent("application/vnd.mymimetype",
                    new BufferedInputStream(new FileInputStream(file)));
 mediaContent.setLength(file.length());

 MediaHttpUploader uploader = new MediaHttpUploader(mediaContent, transport, new HttpRequestInitializer() {

                @Override
                public void initialize(HttpRequest request) throws IOException {
                    GoogleHeaders headers = getDefaultHeaders();
                    headers.setSlug("thefile.mab");
                    request.setHeaders(headers);
                }
            });
 uploader.setMetadata(oContent);

 MediaHttpUploaderProgressListener listner = new CustomProgressListener();
 uploader.setProgressListener(listner);
 uploader.setDirectUploadEnabled(true);

 HttpResponse response = uploader.upload(new GoogleUrl(sURL));
 if (!response.isSuccessStatusCode()) { // Gets that the upload was successful
            throw new Exception("Error");
 }

私は何が欠けていますか?? :/

4

1 に答える 1

0

私はあなたと同じ問題を抱えていました。そして、MediaHttpUploader に有効なヘッダーが設定されていないようです。

ここで私のために働くコード

GoogleUrl url = new GoogleUrl("resumable upload link ");

GoogleHeaders headers = new GoogleHeaders();
headers.setSlugFromFileName("my image.jpg");
headers.set("X-Upload-Content-Type", "image/jpeg");
headers.set("X-Upload-Content-Length", content.getLength());
//without this I got the same error
headers.gdataVersion = "3";

MediaHttpUploader uploader = new MediaHttpUploader(content, getTransport(), getRequestFactory().getInitializer());
uploader.setInitiationMethod(HttpMethod.POST);
uploader.setInitiationHeaders(headers);
uploader.upload(url);
于 2012-09-20T09:54:58.447 に答える