1

Google ドライブに新しい空のファイル (ドキュメントではない) を作成する必要がある機能を開発しています。現在、ドキュメント リスト API 3.0 を使用しており、ドキュメントを参照しています: https://developers.google.com/google-apps /documents-list/#uploading_a_new_document_or_file_with_both_metadata_and_content . 空のファイルを生成するために、0 バイトのファイルを Google ドライブにアップロードします。

リクエストのステップ 1 とリクエストのステップ 2 で問題が発生しました。最初の Post[resumable-create-media link] リクエストの後、アップロードの場所を取得しました。次に、その場所に put メソッドをリクエストすると、404 not found エラーが発生しました。すべてのリクエストには、「GData-Version: 3.0」および「Authorization: accessToken」ヘッダーがあります。

私はフォーラムからたくさん検索し、空のドキュメントを作成する方法を見つけましたが、空のファイルを作成する方法を理解できませんでした. これが私のコードです。誰がどの部分が間違っているかを知るのを手伝ってくれますか? 前もって感謝します。

private final static String PARAM_CONTENT_TYPE = "Content-Type";
private final static String PARAM_UPLOAD_LENGTH = "X-Upload-Content-Length";
private final static String PARAM_UPLOAD_TYPE = "X-Upload-Content-Type";
private final static String CONTENT_TYPE_XML = "application/atom+xml";
private final static String URI_RESUMABLE_RESOURCE = "https://docs.google.com/feeds/upload/create-session/default/private/full";
private final static String ENTITY_NEW_FILE = "<?xml version=\"1.0\" encoding=\"UTF-8\"?><entry xmlns=\"http://www.w3.org/2005/Atom\" "
        + "xmlns:docs=\"http://schemas.google.com/docs/2007\"><title>{0}</title></entry>";

@Override
public boolean createNewFile() throws IOException {
    String uri = null;
    if (ROOT.equals(parentResourceId))
        uri = URI_RESUMABLE_RESOURCE;
    else
        uri = URI_RESUMABLE_RESOURCE + "/%3A" + parentResourceId + "/contents";
    try {
        StringEntity entity = new StringEntity(MessageFormat.format(ENTITY_NEW_FILE, getName()), Constants.ENCODING);
        Map<String, String> headers = new HashMap<String, String>();
        headers.put(PARAM_CONTENT_TYPE, CONTENT_TYPE_XML);
        headers.put(PARAM_UPLOAD_LENGTH, "0");
        headers.put(PARAM_UPLOAD_TYPE, "text/plain");
        Map<String, String> params = new HashMap<String, String>();
        params.put("convert", "false");
        HttpResponse response = helper.execMethodAsResponse(uri, new PostMethod(entity), headers, params);
        String location = null;
        if ((location = response.getFirstHeader("Location").getValue()) != null) {
            headers = new HashMap<String, String>();
            headers.put(PARAM_CONTENT_TYPE, "text/plain");
            headers.put("Content-Range", "bytes 0-0/0");
            //FIXME: Problem occurs here, this put invocation will return 404 not found error.
            JsonObject obj = helper.execMethodAsJson(location, new PutMethod(new ByteArrayEntity(new byte[0])), headers, null);
            if (obj != null) {
                decorateFile(this, obj.get("entry").getAsJsonObject());
                return true;
            }
        }
    } catch (UnsupportedEncodingException e) {
    }
    return false;
}
4

2 に答える 2

0

Google ドライブで空のファイルを作成する最も簡単な方法は、Google ドライブ API v2 を使用してservice.files.insert(File content)リクエストを送信することです。

リファレンス ガイドの Java サンプルを使用して、 httpsMediaContent : //developers.google.com/drive/v2/reference/files/insertを含めないように編集できます。

于 2012-09-12T08:17:14.530 に答える
0

このリンクによると、問題を把握しました: Google Documents List API file upload 400 response

2 番目の put リクエストには、「GData-Version: 3.0」や「Authorization: Bearer ****」などの追加のヘッダーは必要ありません。必要なのは、ロケーション URI を含む新しい put リクエストだけです。ステータス コード 201 の応答が返されます。

皆さんありがとう。

于 2012-09-12T08:20:15.423 に答える