微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Moodle 损坏上传的文件

如何解决Moodle 损坏上传的文件

我正在使用这个脚本的moodle api core_files_upload 和node 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 }

函数返回成功并上传文件,我检查了上传文件大小与原始文件相同,不幸的是我打开文件失败并一直说如下图

enter image description here

而且图片也不能显示

enter image description here

上传的 base64 也有像 data:application/pdf;base64,JVBERi0xLjQNJeL... 这样的 mime/type 标头,我真的不知道出了什么问题。当我尝试使用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'
    }

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。