2

Android SDK を試すためのアプリを作成しました。以前はうまくいきました(認証トークンの取得、写真の撮影、Googleドライブフォルダーへのアップロード)。最近、アプリで Google ドライブへのアップロードに問題が発生しました。以下は、アップロードを行うコードです。基本的に、ファイルが存在するかどうかをチェックし、insert() または update() を使用するかどうかを決定します。以前はうまくいきましたが、今は Google ドライブにファイルをアップロードしようとすると. GoogleDrive にフォルダを正常に作成したら、次のステップはファイルをアップロードすることですが、毎回次のようなエラー メッセージが表示されます。

07-03 13:49:54.824: W/System.err(31132): com.google.api.client.googleapis.json.
GoogleJsonResponseException: 400 Bad Request
07-03 13:49:54.824: W/System.err(31132): {
07-03 13:49:54.824: W/System.err(31132):   "code": 400,
07-03 13:49:54.824: W/System.err(31132):   "errors": [
07-03 13:49:54.824: W/System.err(31132):     {
07-03 13:49:54.824: W/System.err(31132):       "domain": "global",
07-03 13:49:54.824: W/System.err(31132):       "message": "Media type '' is not supported. Valid media types: [*/*]",
07-03 13:49:54.824: W/System.err(31132):       "reason": "badContent"
07-03 13:49:54.824: W/System.err(31132):     }
07-03 13:49:54.824: W/System.err(31132):   ],
07-03 13:49:54.824: W/System.err(31132):   "message": "Media type '' is not supported. Valid media types: [*/*]"

私の当初の推測では、コードでアップロード本文の MIMETYPE を設定するのを忘れていました。コードを更新して、実行前に MIMETYPE を設定したためです。ログで、MIME タイプが変更されたことを確認できますが、アップロードを実行すると、メディア タイプ '' がサポートされていないことを示す同じエラー メッセージが引き続き表示されます。(または空だと思います)。誰が何が起こったのか知っていますか?以前の質問を検索しましたが、役に立ちました。

  private com.google.api.services.drive.model.File processGDFile(Drive service,
  String parentId, File localFile) throws Exception {
Log.i(TAG, "We are in processGDFile");
boolean existed = false;
com.google.api.services.drive.model.File processedFile;
// Determine whether the file exists in this folder or not.
String q = "'" + parentId + "' in parents and" + "title = " + "'"
    + localFile.getName() + "'";

FileContent mediaContent = new FileContent("", localFile);

FileList resultFileList = ExcuteQuery(q);

try {
  // if this file already exists in GD, we do update
  if (!resultFileList.getItems().isEmpty()) { 
    Log.i(TAG, "the file exists, use update....");
    existed = true;
    com.google.api.services.drive.model.File gdFile = resultFileList
        .getItems().get(0);
    Log.i(TAG, "MIMETYPE:" + gdFile.getMimeType());
    gdFile.setMimeType("image/jpeg");
    Log.i(TAG, "MIMETYPE_after:" + gdFile.getMimeType());

    processedFile = service.files()
        .update(gdFile.getId(), gdFile, mediaContent).execute();


    // Uncomment the following line to print the File ID.
    Log.i(TAG, "Processed File ID: %s" + processedFile.getId());

  } else {
    Log.i(TAG, "the file is new, create its meta data");
    // Start the new File's metadata.
    com.google.api.services.drive.model.File body = new com.google.api.services.drive.model.File();
    body.setTitle(localFile.getName());


    // Set the parent folder.
    if (parentId != null && parentId.length() > 0) {
      body.setParents(Arrays.asList(new ParentReference().setId(parentId)));
    }
    Log.i(TAG, " before insert body");

    Log.i(TAG, "MIMETYPE:" + body.getMimeType());
    body.setMimeType("image/jpeg");
    Log.i(TAG, "MIMETYPE_after:" + body.getMimeType());
    processedFile = service.files().insert(body, mediaContent).execute();

    Log.i(TAG, "Processed File ID: %s" + processedFile.getId());

  }
} catch (Exception e) {
  throw e;
}
return processedFile;

}

誰もこの問題を解決する方法を知っていますか? ありがとう〜

4

3 に答える 3

0

File オブジェクトで MIME タイプを設定しているようですが、FileContent オブジェクトで設定する必要があります。

ファイル コンテンツを作成するときは、コンストラクターnew FileContent("image/jpeg", localFile);またはメソッドを使用して型を渡すことができますsetType("image/jpeg");が、bodyインスタンスではなく、 mediaContentインスタンスで行うことができます。

于 2013-07-04T03:36:16.590 に答える
0

必ず含めてください

 <data android:mimeType="application/vnd.google-apps.drive-sdk.123456yourclientid" />

あなたのxmlで。123456yourclientid は、Google API コンソールからのクライアント ID です。

このページのビデオは非常に役に立ちました。クイックスタート: Android でドライブ アプリを実行する

また、Android ドライブ アプリとの統合に関するフォローアップ ビデオも必ずご覧ください。

お役に立てれば。

于 2013-07-04T06:12:29.490 に答える
0

最初の行:

FileContent mediaContent = new FileContent("", localFile);

'image/jpeg' のような 'type/subtype' 形式の MIME タイプではなく、null 文字列が含まれています。これは、insert を使用してリクエストを実行する前に行う必要があります。そうすれば、400 エラー コード (Bad Request) が表示されなくなります。

于 2013-11-17T11:25:26.650 に答える