bootstrap-wysiwyg 图片上传到后台 koa2

发布于 2022-09-05 23:11:57 字数 1344 浏览 9 评论 0

bootstarp-wysiwyg
koa-multer
这里用了官方最简单例子:
后台代码

const Koa = require('koa');
const route = require('koa-route');
const multer = require('koa-multer');
 
const app = new Koa();
const upload = multer({ dest: 'uploads/' });
 
app.use(route.post('/profile', upload.single('avatar')));
 
app.listen(3000)

bootstrap-wysiwyg本身没有实现文件上传,所以要改源码:百度了很多种方法,
查看源码
都说修改 readFileIntoDataUrl方法:

    var readFileIntoDataUrl = function (fileInfo) {
        // var loader = $.Deferred(),
        //     fReader = new FileReader();
        // fReader.onload = function (e) {
        //     loader.resolve(e.target.result);
        // };
        // fReader.onerror = loader.reject;
        // fReader.onprogress = loader.notify;
        // fReader.readAsDataURL(fileInfo);
        // return loader.promise();


     var form = new FormData();
     form.append("file", fileInfo);
     var xhr = new XMLHttpRequest();
     xhr.open("post", "/profile", false);
     xhr.send(form);
     return xhr.responseText;
};    

然后求大神修改!5555~~

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

╰◇生如夏花灿烂 2022-09-12 23:11:57

Multer is a node.js middleware for handling multipart/form-data for koa.
multer wrapper for koa's middleware.
至于怎么上传文件还不是很懂。
但是我们用另一种方法:上传base64,后台再处理base64

    var readFileIntoDataUrl = function (fileInfo) {
        // var loader = $.Deferred(),
        //     fReader = new FileReader();
        // fReader.onload = function (e) {
        //     loader.resolve(e.target.result);
        // };
        // fReader.onerror = loader.reject;
        // fReader.onprogress = loader.notify;
        // fReader.readAsDataURL(fileInfo);
        // return loader.promise();

        var loader = $.Deferred(),
              fReader = new FileReader();
        fReader.onload = function (e) {
        $.ajax({
            url: '/base64',
            method: 'post',
            data: {img: e.target.result}
        }).done(function(msg) {
            loader.resolve(msg.url);
        });            

        };
        fReader.onerror = loader.reject;
        fReader.onprogress = loader.notify;
        fReader.readAsDataURL(fileInfo);
        return loader.promise();        
    };
....
async function a(dataBuffer,type) {
    var name = Date.now() +'.' + type;
    var url = __dirname + '/app/public/uploads/'+name
    return new Promise(function(resolve, reject) {
        fs.writeFile(url, dataBuffer, function(err) {
            if(err){
                reject(err);
            }else{
                resolve({
                    url: '/uploads/'+name
                });
            }
        });
    });    
}
router.post('/base64', async function(ctx, next) {
    var imgData = ctx.request.body.img;
    //过滤data:URL
    var base64Data = imgData.replace(/^data:image\/\w+;base64,/, "");
    var type = imgData.replace(/data:image\/([^;]+).*/i,'$1');//取类型
    var dataBuffer = new Buffer(base64Data, 'base64');    
    var img = await a(dataBuffer,type);    
    console.log(img);
    return ctx.body = img;
});
...
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文