javascript - Moodle 损坏的上传文件
问题描述
我正在core_files_upload
使用这个脚本将moodle api与节点js一起使用
const { CallService } = require("../MoodleWS")
var Upload = async function(userid, file) {
var base64 = await toBase64(file)
.then(r => {
return r;
})
.catch((e) => {
console.log(e)
});
console.log(base64);
var param = {
itemid: 0,
instanceid: userid,
filearea: 'draft',
filecontent: base64,
component: 'user',
filepath: '/',
filename: file.name,
contextlevel: 'user'
}
// return promise calling web service, basically returned axios
return CallService('POST', 'core_files_upload', false, null, param);
}
const toBase64 = file => new Promise((resolve, reject) => {
const reader = new FileReader();
reader.readAsDataURL(file);
reader.onload = () => resolve(reader.result);
reader.onerror = () => reject(reader.error);
})
module.exports = { Upload }
函数返回成功并上传文件,我检查了上传的文件大小与原始文件相同,不幸的是我无法打开文件并一直说如下图
并且图像也无法显示
上传的 base64 也有 mime/type 标题,就像data:application/pdf;base64,JVBERi0xLjQNJeL...
我真的不知道出了什么问题。当我尝试使用moodle的本机网络版本上传文件时,文件正确上传。所以有人可以帮忙吗?谢谢
解决方案
所以事实证明我不需要包含来自 base64 的 mime/type。所以我只是删除data:application/pdf;base64
并修改了我的参数,所以它变得像
var base64 = await toBase64(file)
.then(r => {
return r;
})
.catch((e) => {
console.log(e)
});
var param = {
itemid: 0,
instanceid: userid,
filearea: 'draft',
filecontent: base64.split(',')[1],
component: 'user',
filepath: '/',
filename: file.name,
contextlevel: 'user'
}
推荐阅读
- c# - MSAL Azure Ad 身份验证获取 One Note 资源的访问令牌
- c++ - 为什么我在 C++ 中定义“epsilon”后不能包含标准算法库?
- python - 在 Django 中访问 MySQL 视图
- javascript - 根据传递的输入过滤对象数组:Javascript
- module - Gatsby - 如果 SEO 组件嵌套在另一个组件中,则不会呈现数据
- python - 我正在尝试创建一个最喜欢的内容 btn,但我得到了(AttributeError at /contents/'QuerySet' 对象没有属性'favourite')?
- python - 如何检查文本文件中的一行文本?
- android - 调用 Firebase 函数后如何写入 Firebase 实时数据库?
- amazon-web-services - AWS Lambda API 应用程序 .Net Core 没有响应
- vb.net - 如何使用 WorkingDirectory 和 shellExecute = false 在 vb.net 中运行 Powershell 脚本