2016-07-25 2 views
1

GCS API를 사용하여 이미지 데이터로 측량을 시도하고 있습니다.API SurveyQuestionImage.Data 필드의 올바른 형식은 무엇입니까?

.Net 플랫폼에서 NuGet 패키지 Google.Apis.ConsumerSurveys.v2 버전 1.14.0.564를 사용하고 있습니다. 문제없이 이미지 데이터를 포함하지 않는 설문 조사를 만들 수 있습니다. 그러나 이미지 데이터로 설문 조사를 만들려고하면 API에서 오류가 발생합니다.

나는 base64로 인코딩 된 png 형식의 이미지 데이터를 가지고 있습니다. src 속성이 나는 설문 조사 이미지를 채울 API이 이미지 데이터를 보낼

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

로 설정되어있을 때 내 이미지는 웹 페이지에서 IMG 태그에 제대로 표시. 제 생각에는 Google.Apis.ConsumerSurveys.v2.Data.SurveyQuestionImage 객체의 Data 속성을 이미지 데이터가 포함 된 문자열로 설정해야합니다. 나는 성공하지 못했습니다.

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

이이 API에서이 오류가 발생합니다 : 나는대로 SurveyQuestionImage 객체의 데이터 속성을 설정 시도

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

:

내가 먼저 바이트 배열에 내 base64로 문자열을 디코딩 :

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

또한 바이트 배열을 16 진수로 변환하려고 시도했습니다. 이것은 더 희망적인 오류가 발생

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"해야합니다./''_ '대신'+ '의 대신'- '

웹 안전 인코딩을 사용합니다 : 즉 (각각 파이썬과 자바)

, 당신은 먼저 base64로 인코딩해야합니다 '

희망이 있습니다.

C#을 사용자의 경우, 웹 적합 B64를 만들기 위해이 기술을 체크 아웃 : .NET 사용자의

How to achieve Base64 URL safe encoding in C#?

,이 질문의 의견을보실 수 :

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

우수! 이것은 일을합니다. 많은 분들께 감사드립니다. –

관련 문제