1

我正在使用 GCS API,尝试使用图像数据创建调查。

我在 .Net 平台上使用 NuGet 包 Google.Apis.ConsumerSurveys.v2 版本 1.14.0.564。我可以毫无问题地创建不包含图像数据的调查。但是,当我尝试使用图像数据创建调查时,我收到来自 API 的错误。

我手头有base64编码的png格式的图像数据。当 src 属性设置为时,我的图像在网页的 IMG 标记中正确显示

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

我想将此图像数据发送到 API 以填充调查图像。我的理解是我需要将 Google.Apis.ConsumerSurveys.v2.Data.SurveyQuestionImage 对象的 Data 属性设置为包含图像数据的字符串。我没有成功。

我首先将我的 base64 字符串解码为一个字节数组:

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

我尝试将 SurveyQuestionImage 对象中的 Data 属性设置为:

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

有谁知道对象Data属性的正确格式Google.Apis.ConsumerSurveys.v2.Data.SurveyQuestionImage

4

1 回答 1

2

数据需要经过 base64 编码,还需要“urlsafe”或“websafe”,具体取决于您使用的语言。(分别是python和java)

换句话说,您需要先进行 base64 编码,然后:

Web 安全编码使用“-”而不是“+”、“_”而不是“/”

希望这可以帮助!

对于c#用户,请查看此技术以制作 websafe b64:

如何在 C# 中实现 Base64 URL 安全编码?

对于.net用户,请查看此问题中的评论:

将字符串转换为网络安全的 Base64 格式

以及此链接以获取有关.net特定编码选项的更多信息:

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();
    }
于 2016-08-05T20:06:53.080 回答