使用 Google 联系人 API v3 更新照片
Updating Photo using Google Contacts API v3
我正在尝试使用 Google 联系人 API v3 update/add 将照片发送给现有联系人,但我不知道该怎么做。我正在使用 ColdFusion。
我可以通过 Google 服务进行身份验证、读取照片、显示照片,甚至删除照片。当我尝试为联系人更新或添加照片时,我收到错误请求的状态代码 400 - 图像文件无效。
这是我正在使用的代码:
<cfhttp method="put" url="https://www.google.com/m8/feeds/photos/media/myemail/contactid" result="chgphoto">
<cfhttpparam type="header" name="Authorization" value="OAuth sessiontoken" >
<cfhttpparam type="header" name="GData-Version" value="3.0">
<cfhttpparam type="header" name="If-Match" value="*">
<cfhttpparam name="Content-Type" type="header" value="image/jpeg">
(THE NEXT LINE IS IS MY ISSUE - I THINK)
<cfhttpparam type="body" value="E:\PATH\TO\FILE\image.jpg">
</cfhttp>
我已经为我认为我的问题所在的行尝试了很多很多组合,包括:
1. <cfhttpparam type="body" value="E:\PATH\TO\FILE\image.jpg">
2. <cfhttpparam type="body" value="/9j/4AAQSkZJRgABAQAAAQABAAD/2wBDAAoHBwgHBgoICAgLCgoLDhgQDg0NDh0VFhEYIx8lJCIfIiEmKzcvJik0KSEiMEExNDk7Pj4+JS5ESUM8SDc9Pjv/2wBDAQoLCw4NDhwQEBw7KCIoOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozv/wAARCAAQABADASIAAhEBAxEB/8QAFwAAAwEAAAAAAAAAAAAAAAAAAAEFBv/EACMQAAEDAwQCAwAAAAAAAAAAAAECAwUEESEABjEyEhNBYbH/xAAUAQEAAAAAAAAAAAAAAAAAAAAF/8QAHREAAgEEAwAAAAAAAAAAAAAAAREAAgMTwUGBof/aAAwDAQACEQMRAD8A2O4NxOmpeYZqFstNKKAG1FJJBIJJGeQQACOL5+CKk5WHqo9uWqQtmSd9bbDqiXmyeqs5sTYEE4uPsacrTS8DL1FbQxxlKCqV7FMAeSm3L3vbntc3A/AdStv7fnZzc7U5OMuU7TCw4lLo8VKUOqQnkAHOjRTcytl+LcLJuZeW+luf/9k=">
3. <cfhttpparam type="header" name="body" value="E:\PATH\TO\FILE\image.jpg">
4. <cfhttpparam type="xml" value="<link rel='http://schemas.google.com/contacts/2008/rel##photo' type='image/*' href='https://www.google.com/m8/feeds/photos/media/myemail/contactid'>">
当然,其中 none 是正确的方法。有人可以帮忙吗?
如果您使用 Content-Type: image/jpeg
传输请求,则需要发送图像的(二进制)内容。所以只需这样做:
<cfhttpparam type="body" value="#fileRead("E:\PATH\TO\FILE\image.jpg")#">
编辑:请注意,对于较大的图像,您可能需要使用 fileRead
增加缓冲区大小。您可以提供最大尺寸作为第二个参数。
如果这不起作用,您可能需要将内容作为 HEX 发送:
<cfhttpparam type="body" value="#binaryEncode(fileReadBinary("E:\PATH\TO\FILE\image.jpg"), "HEX")#">
编辑:请注意 fileReadBinary
没有缓冲区大小限制,并且在处理大文件时可能会导致服务器崩溃。
很遗憾,我发现最初的答案并不准确,因为使用#fileRead("E:\PATH\TO\FILE\image.jpg")#"> 只读取文件的一部分,而不是全部。结果要么是图像通过 Google API 乱码或根本不保存 - 即 400 Bad Request。也就是说,如果没有这个问题的原始响应者的输入,我将无法弄清楚正确答案。
需要进行的是一个两步过程...
首先,读取二进制文件:
<cffile action="readbinary" file="E:\PATH\TO\FILE\image.jpg" variable="binimage">
其次,将其转换回'body'中的字符串:
<cfhttpparam type="body" value="#ToString(ToBinary(binimage))#">
一旦我这样做了,图像就通过 Google API 正确保存了,并且没有乱码,因为它之前只是一个部分文件。
希望这对其他人有帮助。
我正在尝试使用 Google 联系人 API v3 update/add 将照片发送给现有联系人,但我不知道该怎么做。我正在使用 ColdFusion。
我可以通过 Google 服务进行身份验证、读取照片、显示照片,甚至删除照片。当我尝试为联系人更新或添加照片时,我收到错误请求的状态代码 400 - 图像文件无效。
这是我正在使用的代码:
<cfhttp method="put" url="https://www.google.com/m8/feeds/photos/media/myemail/contactid" result="chgphoto">
<cfhttpparam type="header" name="Authorization" value="OAuth sessiontoken" >
<cfhttpparam type="header" name="GData-Version" value="3.0">
<cfhttpparam type="header" name="If-Match" value="*">
<cfhttpparam name="Content-Type" type="header" value="image/jpeg">
(THE NEXT LINE IS IS MY ISSUE - I THINK)
<cfhttpparam type="body" value="E:\PATH\TO\FILE\image.jpg">
</cfhttp>
我已经为我认为我的问题所在的行尝试了很多很多组合,包括:
1. <cfhttpparam type="body" value="E:\PATH\TO\FILE\image.jpg">
2. <cfhttpparam type="body" value="/9j/4AAQSkZJRgABAQAAAQABAAD/2wBDAAoHBwgHBgoICAgLCgoLDhgQDg0NDh0VFhEYIx8lJCIfIiEmKzcvJik0KSEiMEExNDk7Pj4+JS5ESUM8SDc9Pjv/2wBDAQoLCw4NDhwQEBw7KCIoOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozv/wAARCAAQABADASIAAhEBAxEB/8QAFwAAAwEAAAAAAAAAAAAAAAAAAAEFBv/EACMQAAEDAwQCAwAAAAAAAAAAAAECAwUEESEABjEyEhNBYbH/xAAUAQEAAAAAAAAAAAAAAAAAAAAF/8QAHREAAgEEAwAAAAAAAAAAAAAAAREAAgMTwUGBof/aAAwDAQACEQMRAD8A2O4NxOmpeYZqFstNKKAG1FJJBIJJGeQQACOL5+CKk5WHqo9uWqQtmSd9bbDqiXmyeqs5sTYEE4uPsacrTS8DL1FbQxxlKCqV7FMAeSm3L3vbntc3A/AdStv7fnZzc7U5OMuU7TCw4lLo8VKUOqQnkAHOjRTcytl+LcLJuZeW+luf/9k=">
3. <cfhttpparam type="header" name="body" value="E:\PATH\TO\FILE\image.jpg">
4. <cfhttpparam type="xml" value="<link rel='http://schemas.google.com/contacts/2008/rel##photo' type='image/*' href='https://www.google.com/m8/feeds/photos/media/myemail/contactid'>">
当然,其中 none 是正确的方法。有人可以帮忙吗?
如果您使用 Content-Type: image/jpeg
传输请求,则需要发送图像的(二进制)内容。所以只需这样做:
<cfhttpparam type="body" value="#fileRead("E:\PATH\TO\FILE\image.jpg")#">
编辑:请注意,对于较大的图像,您可能需要使用 fileRead
增加缓冲区大小。您可以提供最大尺寸作为第二个参数。
如果这不起作用,您可能需要将内容作为 HEX 发送:
<cfhttpparam type="body" value="#binaryEncode(fileReadBinary("E:\PATH\TO\FILE\image.jpg"), "HEX")#">
编辑:请注意 fileReadBinary
没有缓冲区大小限制,并且在处理大文件时可能会导致服务器崩溃。
很遗憾,我发现最初的答案并不准确,因为使用#fileRead("E:\PATH\TO\FILE\image.jpg")#"> 只读取文件的一部分,而不是全部。结果要么是图像通过 Google API 乱码或根本不保存 - 即 400 Bad Request。也就是说,如果没有这个问题的原始响应者的输入,我将无法弄清楚正确答案。
需要进行的是一个两步过程...
首先,读取二进制文件:
<cffile action="readbinary" file="E:\PATH\TO\FILE\image.jpg" variable="binimage">
其次,将其转换回'body'中的字符串:
<cfhttpparam type="body" value="#ToString(ToBinary(binimage))#">
一旦我这样做了,图像就通过 Google API 正确保存了,并且没有乱码,因为它之前只是一个部分文件。
希望这对其他人有帮助。