2016-07-25 32 views
1

我正在使用GCS API,嘗試使用圖像數據創建調查。API SurveyQuestionImage.Data字段的正確格式是什麼?

我在.Net平臺上使用NuGet軟件包Google.Apis.ConsumerSurveys.v2版本1.14.0.564。我可以創建不包含沒有問題的圖像數據的調查。但是,當我嘗試使用圖像數據創建調查時,我收到來自API的錯誤。

我手邊有base64編碼的png格式圖像數據。當src屬性設置爲

'data:image/png;base64,<image base64 string>' 

我想這個圖像數據發送到API來填充檢測圖像我的圖片在網頁上的IMG標籤正確顯示。我的理解是,我需要將Google.Apis.ConsumerSurveys.v2.Data.SurveyQuestionImage對象的Data屬性設置爲包含圖像數據的字符串。我沒有成功。

我第一次我的base64字符串解碼爲字節數組:

byte[] bytes = Convert.FromBase64String(<image base64 string>); 

我曾嘗試爲設置數據屬性的SurveyQuestionImage對象:

image.Data = Encoding.Unicode.GetString(bytes); 

這導致了這個錯誤來自API :

Google.Apis.Requests.RequestError Invalid value for ByteString: <the Data string> 

我也嘗試將字節數組轉換爲十六進制編碼字符串:

StringBuilder sb = new StringBuilder(bytes.Length); 
foreach (Byte b in bytes) 
{ 
    sb.Append(b.ToString("X2")); 
} 
image.Data = sb.ToString(); 

這將導致更多的希望錯誤:

Google.Apis.Requests.RequestError Invalid Value supplied to API: image_data was bad. Request Id: 579665c300ff05e6c316a09e600001737e3430322d747269616c320001707573682d30372d32322d72313000010112 [400] Errors [ Message[Invalid Value supplied to API: image_data was bad. Request Id: 579665c300ff05e6c316a09e600001737e3430322d747269616c320001707573682d30372d32322d72313000010112] Location[ - ] Reason[INVALID_VALUE] Domain[global] ] 

有誰知道爲Google.Apis.ConsumerSurveys.v2.Data.SurveyQuestionImage對象的Data屬性的正確格式?

回答

2

根據您使用的語言,數據需要進行base64編碼,並且還需要「urlsafe」或「websafe」。 (Python和Java,分別)

換句話說,你需要先使用Base64編碼則:

網絡安全編碼使用 ' - ' 而不是 '+', '_',而不是「/ '

希望這會有所幫助!

對於C#用戶,看看這種技術製作的網頁安全B64:

How to achieve Base64 URL safe encoding in C#?

對於.NET用戶,看看在這個問題上的意見:

Converting string to web-safe Base64 format

而且這個鏈接更多關於的信息。編碼淨特定選項:

http://www.codeproject.com/Tips/76650/Base-base-url-base-url-and-z-base-encoding


而具體回答原來的海報,嘗試一下本作的字節數組轉換爲字符串。

public static string ToBase64ForUrlString(byte[] input) 
    { 
     StringBuilder result = new StringBuilder(Convert.ToBase64String(input).TrimEnd('=')); 
     result.Replace('+', '-'); 
     result.Replace('/', '_'); 
     return result.ToString(); 
    } 
+1

非常好!這樣做的工作。非常感謝勒克斯。 –

相關問題