使用 Messenger SDK 发送文件数据
Use Messenger SDK to send file data
我有一个 webview
从 messenger bot
打开。
从webview
我想发送图像数据到对话(没有URL - 来自 canvas).
的数据
我尝试使用 Messenger SDK
beginShareFlow 和文件数据附件:
function uploadImage(data) {
let message = {
"attachment": {
"type": "image",
"payload": {
"is_reusable": true
},
"filedata": data
}
};
MessengerExtensions.beginShareFlow(function (share_response) {
// User dismissed without error
if (share_response.is_sent) {
// The user actually did share.
//close the webview
MessengerExtensions.requestCloseBrowser(function success() {
// webview closed
}, function error(err) {
console.log(err);
});
}
},
function (errorCode, errorMessage) {
// An error occurred in the process
console.log(errorMessage);
},
message, "current_thread");
}
但是我得到一个错误:
Messenger Extensions unexpected error.
非常感谢帮助 =]
编辑:
我发现 filedata
用于传输文件位置(我没有)。
所以我尝试了其他解决方案:
- 我用我的 cavas
blob
创建了它,并试图在 filedata
中传递它 - 没有成功
- 我创建了一个
blob
文件(通过添加名称和日期)并尝试移动位置 - 没有成功
- 我从
blob
创建了一个 url 并尝试将其移动为 url (not as filedata) - 出现错误:
Invalid image URL provided in message content
当我从浏览器转到 blob url 时,我看到图像 =[
根据 SDK 的 section on sending attachments:
There are three ways to attach an asset to a message:
- URL
- File
- attachment_id
attachment_id
指的是之前上传的 URL/File 个附件。发送原始文件数据不是一种选择。您必须将图像上传到 URL 或将其保存到文件中。 Blob URLs 不起作用,因为它们仅引用存储在本地系统内存中的数据。您需要将该数据移动到服务器上的图像或文件中。
上传图片到URL
您的第一个选择是将图像上传到 URL。根据图像内容的私密程度,您可以使用 public 图像托管服务,如 imgur,或者您可以将图像上传到服务器上的 public 位置。如果您想隐藏图像,可以将图像保存在包含随机生成的哈希值的 URL 中,并在附件上传到 Messenger 后立即删除该文件。但是,您可以使用第二个选项将图像完全保密:
从(临时)文件上传图像
您的第二个选择是根据文件位置上传图片。通过将图像上传到服务器上的文件,您可以避免图像对 public 可见。为避免填满服务器 space,您可以在附件上传后手动删除该文件,或者您可以使用临时文件。事实上,SDK的example for sending a file演示了发送保存在/tmp
文件夹中的临时文件。
我有一个 webview
从 messenger bot
打开。
从webview
我想发送图像数据到对话(没有URL - 来自 canvas).
我尝试使用 Messenger SDK
beginShareFlow 和文件数据附件:
function uploadImage(data) {
let message = {
"attachment": {
"type": "image",
"payload": {
"is_reusable": true
},
"filedata": data
}
};
MessengerExtensions.beginShareFlow(function (share_response) {
// User dismissed without error
if (share_response.is_sent) {
// The user actually did share.
//close the webview
MessengerExtensions.requestCloseBrowser(function success() {
// webview closed
}, function error(err) {
console.log(err);
});
}
},
function (errorCode, errorMessage) {
// An error occurred in the process
console.log(errorMessage);
},
message, "current_thread");
}
但是我得到一个错误:
Messenger Extensions unexpected error.
非常感谢帮助 =]
编辑:
我发现 filedata
用于传输文件位置(我没有)。
所以我尝试了其他解决方案:
- 我用我的 cavas
blob
创建了它,并试图在filedata
中传递它 - 没有成功 - 我创建了一个
blob
文件(通过添加名称和日期)并尝试移动位置 - 没有成功 - 我从
blob
创建了一个 url 并尝试将其移动为 url (not as filedata) - 出现错误:
Invalid image URL provided in message content
当我从浏览器转到 blob url 时,我看到图像 =[
根据 SDK 的 section on sending attachments:
There are three ways to attach an asset to a message:
- URL
- File
- attachment_id
attachment_id
指的是之前上传的 URL/File 个附件。发送原始文件数据不是一种选择。您必须将图像上传到 URL 或将其保存到文件中。 Blob URLs 不起作用,因为它们仅引用存储在本地系统内存中的数据。您需要将该数据移动到服务器上的图像或文件中。
上传图片到URL
您的第一个选择是将图像上传到 URL。根据图像内容的私密程度,您可以使用 public 图像托管服务,如 imgur,或者您可以将图像上传到服务器上的 public 位置。如果您想隐藏图像,可以将图像保存在包含随机生成的哈希值的 URL 中,并在附件上传到 Messenger 后立即删除该文件。但是,您可以使用第二个选项将图像完全保密:
从(临时)文件上传图像
您的第二个选择是根据文件位置上传图片。通过将图像上传到服务器上的文件,您可以避免图像对 public 可见。为避免填满服务器 space,您可以在附件上传后手动删除该文件,或者您可以使用临时文件。事实上,SDK的example for sending a file演示了发送保存在/tmp
文件夹中的临时文件。