2016-07-25 5 views
1

Ich arbeite mit der GCS-API und versuche, eine Umfrage mit Bilddaten zu erstellen.Welches Format hat das Feld "API SurveyQuestionImage.Data"?

Ich verwende das NuGet-Paket Google.Apis.ConsumerSurveys.v2 Version 1.14.0.564 auf der .Net-Plattform. Ich kann Umfragen erstellen, die keine Bilddaten ohne Probleme enthalten. Wenn ich jedoch versuche, eine Umfrage mit Bilddaten zu erstellen, erhalte ich einen Fehler von der API.

Ich habe auf der Hand Base64 codiert Png-Format-Bilddaten. Meine Bilder korrekt angezeigt wird in einem IMG-Tag auf einer Web-Seite, wenn das src-Attribut auf

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

gesetzt Ich mag diese Bilddaten an die API senden, um die Umfrage Bild zu füllen. Nach meinem Verständnis muss ich die Data-Eigenschaft des Google.Apis.ConsumerSurveys.v2.Data.SurveyQuestionImage-Objekts auf eine Zeichenfolge setzen, die die Bilddaten enthält. Ich war nicht erfolgreich.

ich zum ersten Mal meines base64 String in einen Byte-Array dekodieren:

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

ich versucht habe, in dem SurveyQuestionImage Objekt die Daten-Eigenschaft als:

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

Dies führt zu diesem Fehler aus dem API :

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

Ich habe auch versucht, die Byte-Array zu einem hexadezimalen konvertieren codierte Zeichenfolge wie:

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

Daraus ergibt sich die hoffnungsvoller Fehler:

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] ] 

Kennt jemand das richtige Format für die Data Eigenschaft des Google.Apis.ConsumerSurveys.v2.Data.SurveyQuestionImage Objekt?

Antwort

2

Die Daten müssen base64-kodiert sein und je nach verwendeter Sprache "urlsafe" oder "websafe". (Python und Java, respectively)

Mit anderen Worten, werden Sie zum ersten base64 kodieren müssen dann:

Web sichere Codierung verwendet '-' anstelle von '+', '_' anstelle von ‚/ '

Hoffe, das hilft!

Für C# Benutzer, überprüfen Sie diese Technik aus zur Herstellung von websafe b64:

How to achieve Base64 URL safe encoding in C#?

Für .net Benutzer, Blick auf die Kommentare in dieser Frage:

Converting string to web-safe Base64 format

Und auch dieser Link für weitere Informationen über .net spezifische Optionen für die Kodierung:

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


Und das ursprüngliche Plakat speziell zu beantworten, versuchen Sie dies für Ihren Byte-Array in einen String zu konvertieren.

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

Ausgezeichnet! Das macht den Job. Vielen Dank Lux. –

Verwandte Themen