【发布时间】:2017-08-11 20:33:00
【问题描述】:
我正在将 Quickblox 集成到我的 Ionic2 应用程序中,现在除了上传文件之外,我可以做所有的事情。 在 Quickblox 中,您必须使用他们制作的函数上传文件,根据 js 文档,该函数如下所示:
var inputFile = $("input[type=file]")[0].files[0];
var params = {name: inputFile.name,
file: inputFile,
type: inputFile.type,
size: inputFile.size,
public: false};
QB.content.createAndUpload(params, function(err, response){
if (err) {
console.log(err);
} else {
console.log(response);
var uploadedFile = response;
var uploadedFileId = response.id;
}
});
所以我把上面的代码翻译成打字稿,我有这样的东西:
uploadFile(filename) {
File.resolveDirectoryUrl(cordova.file.dataDirectory).then(
(dirEntry) => {
File.getFile(dirEntry, filename, { create: false }).then(
(fileEntry) => {
console.log(fileEntry);
fileEntry.file((file) => {
console.log(file);
var params = {
name: file['name'],
file: file,
type: file['type'],
size: file['size'],
'public': false
};
quickblox.content.createAndUpload(params,
(err, response) => {
if (err) {
console.log(err);
} else {
console.log(response);
var uploadedFileId = response.id;
var msg = {
type: 'groupchat',
body: "[attachment]",
extension: {
save_to_history: 1,
}
};
msg["extension"]["attachments"] = [{ id: uploadedFileId, type: 'photo' }];
quickblox.chat.send(this.xmpp_room_jid, msg);
}
});
})
}).catch(
(err) => {
console.log(err);
}
);
}
);
}
这项工作是在“我从 quickblox 服务器得到正常响应”的条件下工作的,但是当我去 quickblox 的管理控制台检查上传的内容时,我发现我上传的图像有 0 个字节。 因此,在检查了一段时间的代码后,我将我所有的函数调用与 quickblox 的示例应用程序并排比较,我能发现的唯一区别在于 File 对象。
这是我在 Ionic 2 应用程序中获得的文件对象:
这是我在 quickblox js 示例中得到的:
除了这个 File 对象之外,所有其他的东西看起来都一样。 我几乎可以肯定这是我遇到的问题,并且因为我在这个领域非常新手,所以我找不到从 Ionic 中的 File 对象转换为类似 js 中的 File 对象的方法例子。 预先感谢您的时间和帮助。
编辑:
我附上了 Ionic 应用程序的请求/响应日志:
【问题讨论】:
-
您好,您能否在使用 Ionic 应用程序时列出来自 Chrome 控制台(网络选项卡)的请求/响应日志。我们需要检查后端的内容
-
嗨,伊戈尔,我在那里添加了日志。
-
将 blob 作为 url 编码发送不是一个好主意...
-
谢谢,看起来不错。我们还需要检查对“/complete.json”的请求。你也可以展示一下吗?
-
是的,给你。两个响应都是空的。
标签: javascript typescript ionic2 cordova-plugins quickblox