我想知道後處理文件到谷歌雲存儲,如果任何人都可以告訴我正確的語法&格式化服務帳戶的POST對象發送到水桶請求時?我試圖以編程方式使用它the HttpComponents library。我設法從我GoogleCredential獲得令牌,但我每次構造POST請求的時候,我得到:獲得403(禁止)試圖從服務帳戶
HTTP/1.1 403禁止
<?xml version='1.0' encoding='UTF-8'?><Error><Code>AccessDenied</Code><Message>Access denied.</Message><Details
>鬥名</Details></Error
>
該谷歌documentation描述請求方法,提到使用HTML表單張貼,但我希望這是不是暗示只有這樣,才能把工作做好。我知道HttpComponents有辦法通過使用UrlEncodedFormEntity明確創建表單數據,但它不支持多數據。這就是我使用MultipartEntity類的原因。我的代碼如下:
MultipartEntity entity = new MultipartEntity(HttpMultipartMode.BROWSER_COMPATIBLE);
String token = credential.getAccessToken();
entity.addPart("Authorization", new StringBody("OAuth " + token));
String date = formatDate(new Date());
entity.addPart("Date", new StringBody(date));
entity.addPart("Content-Type", new StringBody("multipart/form-data"));
entity.addPart("bucket", new StringBody(bucket));
entity.addPart("key", new StringBody("fileName"));
entity.addPart("success_action_redirect", new StringBody("/storage"));
File uploadFile = new File("pathToFile");
FileBody fileBody = new FileBody(uploadFile, "text/xml");
entity.addPart("file", fileBody);
httppost.setEntity(entity);
System.out.println("Posting URI = "+httppost.toString());
HttpResponse response = client.execute(httppost);
HttpEntity resp_entity = response.getEntity();
正如我所說,我能得到一個實際的道理,所以我敢肯定,問題是如何我已經形成,而不是沒有正確驗證的請求。
請記住:
- 這是由服務帳戶進行。
- 這意味着它有讀/寫訪問
感謝您的閱讀,我感謝所有幫助!
你可以發佈''bucket''和''httppost.toString()''的內容嗎?此外,我不知道你是否應該內容編碼被設置爲UTF-8這樣的。 – jterrace
順便說一下,我不是太肯定它的任何=)...但我認爲你是對有關內容的編碼。我只是把它扔在那裏,因爲它沒有它也沒有工作。只是測試不同的領域。我會編輯它。 – klactose
你是如何決定POST和PUT的? – fejta