3

Google ドライブ API と Java を使用してファイルを Google ドライブにアップロードしようとしています。

アップロードしようとしているファイルは docx ファイルです (以前に Drive API を使用してエクスポートされました)。私の問題は、スウェーデン語の文字 (åäö など) を含むファイル名を持つファイルをアップロードすると、Drive API が例外をスローすることです。

アップロードのコードは基本的に次のようになります。

File file = new File("/path/to/file.docx");
String contentType = "application/vnd.openxmlformats-officedocument.wordprocessingml.document";

File fileToUpload = new File()
            .setTitle("abc")
            .setMimeType(contentType);

FileContent mediaContent = new FileContent(contentType, file);

try {
    Drive.Files.Insert request = client.files().insert(fileToUpload, mediaContent);
    request.execute();
} catch (IOException e) {
    logger.error("Could not restore file");
    throw e;
}

このコードは実際には正常に動作します。しかし、setTitle("abc") を setTitle("abcö") に変更すると、次の例外が発生します。

com.google.api.client.googleapis.json.GoogleJsonResponseException: 400 Bad Request
Bad Request

google-api-services-drive のバージョン v2-rev82-1.14.2-beta および v2-rev82-1.15.0-rc を使用してみましたが、同じ結果になりました。

それが役立つ場合、私はOSXを使用しています(Windowsはこの種の問題をより頻繁に抱えているようです)。


編集: いくつかの実験の後、FileContent オブジェクト (実際のファイル コンテンツ) を除外し、メタ データをアップロードする空のファイルのみを作成すると、タイトルのスウェーデン語の文字は問題ないことがわかりました。

Drive.Files.Insert request = client.files().insert(fileToUpload);

結局のところ、主な問題はタイトルではないようです。ファイル データを空のファイルに追加する方法がわかれば、完了です。


EDIT2:解決策が見つかりました!

追加:request.getMediaHttpUploader().setDirectUploadEnabled(true);直接アップロードを有効にします (以前に何を使用していたかはわかりません)。これにより、Google ドライブが私の奇妙なスウェーデン語の文字を気にしなくなったようです (繰り返しますが、理由はわかりません)。

これは私が最終的に得たコードです(単純化して):

File file = new File("/path/to/file.docx");
String contentType = "application/vnd.openxmlformats-officedocument.wordprocessingml.document";

File fileToUpload = new File()
        .setTitle("abcö")
        .setMimeType(contentType);

FileContent mediaContent = new FileContent(contentType, file);

try {
    Drive.Files.Insert request = client.files().insert(fileToUpload, mediaContent);
    request.getMediaHttpUploader().setDirectUploadEnabled(true);
    request.execute();
} catch (IOException e) {
    logger.error("Could not restore file");
    throw e;
}

これで、大きなファイルの再開可能なアップロードのサポートを追加するだけで済みますが、それは別の話です。

EDIT3:ちなみに、ここに私を正しい軌道に乗せたドキュメントがあります。

4

1 に答える 1

0

UTF-8 としてエンコードするか、uploadType を「media」に変更します。

于 2013-06-28T15:11:57.013 に答える