如何使用 Google Apps 脚本通过 Wordpress REST API 传输图像
How to transfer image with Wordpress REST API using Google Apps Script
我正在尝试使用 Google Apps 脚本,使用 Wordpress REST API 将图像从 Gmail 电子邮件附件上传到 Wordpress。
我能够成功创建媒体文件,但它始终是空白的,因此实际图像数据并未真正传输。
验证成功,Wordpress凭据肯定有上传权限。当我 运行 我的代码时,在 Wordpress 中创建了一个媒体附件,但它是空白的,而不是实际图像。我已经尝试使用 getAs("image/jpeg") 和许多其他获取文件数据的方法将负载作为 Blob、Base64 编码的字符串、字节发送。
uploadImage();
function getImage(){
var email = GmailApp.search("subject:(EMAIL WITH IMAGE)")[0].getMessages[0];
var attachment = email.getAttachments()[0];
var blob = att.copyBlob();
return blob;
}
function uploadImage(){
// ... SUCCESSFUL AUTHENTICATION OCCURS
var postPayload = {
"file": getImage()
}
var params = {
"payload": JSON.stringify(postPayload),
"contentType": "image/jpeg",
"method": "POST",
"headers" : { "Authorization" : "Bearer XXXXXXXXXXXXXXXXXXXX",
"Content-Disposition": "attachment; filename=test.jpg"}
};
var response = UrlFetchApp.fetch('http://mydomainname.com/wp-json/wp/v2/media/', params);
return response
}
我收到了创建附件的有效 JSON 响应,我希望图像能够上传到 Wordpress。但是,创建的附件是 blank/empty 文件而不是图像。
如果getImage()
returns图像的斑点,这个修改怎么样?
请修改params
的对象如下。 在你运行脚本之前,请确认att.copyBlob()
的att
是否是attachment
。
发件人:
"payload": JSON.stringify(postPayload),
收件人:
"payload": getImage(),
- 在此修改中,
postPayload
未被使用。
注:
- 此修改后的脚本假定您已经能够使用 wordpress 的 REST API 并且可以使用您的访问令牌。
- 我觉得
"payload": getImage()
可以用。但如果出现错误,请尝试修改为"payload": getImage().getBytes()
.
如果这不能解决您的问题,我深表歉意。如果发生错误,请显示错误信息。
试试这个:
function getImage(){
var email = GmailApp.search("subject:(EMAIL WITH IMAGE)")[0].getMessages[0];
var attachment = email.getAttachments()[0];
var blob = att.copyBlob();
return 'data:' + blob.getContentType() + ';base64,' + Utilities.base64Encode(blob.getBytes());
}
试试这个:
uploadImage();
function getImage(){
var email = GmailApp.search("subject:(EMAIL WITH IMAGE)")[0].getMessages[0];
var attachment = email.getAttachments()[0];
var blob = att.copyBlob();
return Utilities.base64Encode(blob.getBytes());
}
function uploadImage(){
// ... SUCCESSFUL AUTHENTICATION OCCURS
var postPayload = {
"file": {
uri: getImage(),
name: 'filename',
type: 'image/jpeg',
}
}
var params = {
"payload": JSON.stringify(postPayload),
'contentType': 'application/json',
"method": "POST",
"headers" : { "Authorization" : "Bearer XXXXXXXXXXXXXXXXXXXX",
"Content-Disposition": "attachment; filename=test.jpg",
'Content-Type': 'multipart/form-data',
'Cache-Control' : 'no-cache'
}
};
var response = UrlFetchApp.fetch('http://mydomainname.com/wp-json/wp/v2/media/', params);
return response
}
我在应用程序脚本中实现了这个问题中给出的解决方案Cannot get images to upload to wp/v2/media with React Native
我正在尝试使用 Google Apps 脚本,使用 Wordpress REST API 将图像从 Gmail 电子邮件附件上传到 Wordpress。
我能够成功创建媒体文件,但它始终是空白的,因此实际图像数据并未真正传输。
验证成功,Wordpress凭据肯定有上传权限。当我 运行 我的代码时,在 Wordpress 中创建了一个媒体附件,但它是空白的,而不是实际图像。我已经尝试使用 getAs("image/jpeg") 和许多其他获取文件数据的方法将负载作为 Blob、Base64 编码的字符串、字节发送。
uploadImage();
function getImage(){
var email = GmailApp.search("subject:(EMAIL WITH IMAGE)")[0].getMessages[0];
var attachment = email.getAttachments()[0];
var blob = att.copyBlob();
return blob;
}
function uploadImage(){
// ... SUCCESSFUL AUTHENTICATION OCCURS
var postPayload = {
"file": getImage()
}
var params = {
"payload": JSON.stringify(postPayload),
"contentType": "image/jpeg",
"method": "POST",
"headers" : { "Authorization" : "Bearer XXXXXXXXXXXXXXXXXXXX",
"Content-Disposition": "attachment; filename=test.jpg"}
};
var response = UrlFetchApp.fetch('http://mydomainname.com/wp-json/wp/v2/media/', params);
return response
}
我收到了创建附件的有效 JSON 响应,我希望图像能够上传到 Wordpress。但是,创建的附件是 blank/empty 文件而不是图像。
如果getImage()
returns图像的斑点,这个修改怎么样?
请修改params
的对象如下。 在你运行脚本之前,请确认att.copyBlob()
的att
是否是attachment
。
发件人:
"payload": JSON.stringify(postPayload),
收件人:
"payload": getImage(),
- 在此修改中,
postPayload
未被使用。
注:
- 此修改后的脚本假定您已经能够使用 wordpress 的 REST API 并且可以使用您的访问令牌。
- 我觉得
"payload": getImage()
可以用。但如果出现错误,请尝试修改为"payload": getImage().getBytes()
.
如果这不能解决您的问题,我深表歉意。如果发生错误,请显示错误信息。
试试这个:
function getImage(){
var email = GmailApp.search("subject:(EMAIL WITH IMAGE)")[0].getMessages[0];
var attachment = email.getAttachments()[0];
var blob = att.copyBlob();
return 'data:' + blob.getContentType() + ';base64,' + Utilities.base64Encode(blob.getBytes());
}
试试这个:
uploadImage();
function getImage(){
var email = GmailApp.search("subject:(EMAIL WITH IMAGE)")[0].getMessages[0];
var attachment = email.getAttachments()[0];
var blob = att.copyBlob();
return Utilities.base64Encode(blob.getBytes());
}
function uploadImage(){
// ... SUCCESSFUL AUTHENTICATION OCCURS
var postPayload = {
"file": {
uri: getImage(),
name: 'filename',
type: 'image/jpeg',
}
}
var params = {
"payload": JSON.stringify(postPayload),
'contentType': 'application/json',
"method": "POST",
"headers" : { "Authorization" : "Bearer XXXXXXXXXXXXXXXXXXXX",
"Content-Disposition": "attachment; filename=test.jpg",
'Content-Type': 'multipart/form-data',
'Cache-Control' : 'no-cache'
}
};
var response = UrlFetchApp.fetch('http://mydomainname.com/wp-json/wp/v2/media/', params);
return response
}
我在应用程序脚本中实现了这个问题中给出的解决方案Cannot get images to upload to wp/v2/media with React Native