[从入门到入土(前端篇)]五,上传文件到OSS(二)

[从入门到入土(前端篇)]五,上传文件到OSS(二)

上一篇文章讲解了上传普通图片文件到oss,这篇文章将会讲解系统中,md编辑中的图片上传,和md文件上传的操作

1.md编辑器中插入本地图片

首先我们可以在文档查看图片上传的相关操作

上传本地图片

大家可以边看文档边操作

根据文档,首先设置 disabled-menus 为空数组

1501.png

<v-md-editor
   v-model="text"
   height="600px" 
   @upload-image="handleUploadImage"
   :disabled-menus="[]">
</v-md-editor>

...methods
handleUploadImage(event, insertImage, files){
     console.log(files);            
},
...

我们可以运行先看看效果和选择后的文件是什么

首先点击图片按钮就出现了上传本地图片的操作
1502.png
选择图片文件后,就可以看到是个文件信息
1503.png

调用之前上传图片的接口,获取到oss地址后执行插入图片操作
handleUploadImage(event, insertImage, files){
      console.log(files);
      //获取后台签名
      ossSign({}).then((res)=>{
             if(res.code == 200){
                 let ossInfo = res.data;
                 let fileName =  files[0].name;
                 let suffix = fileName.substr(fileName.lastIndexOf('.'))
                 //进行文件上传
                 ossUpload(files[0],ossInfo).then((res)=>{
                     let url= `${ossInfo.host}/${ossInfo.startsWith}${ossInfo.key}${suffix}`
                     //将OSS的图片地址插入到文档中
                     insertImage({
                         url:url,
                         desc: fileName,
                         // width: 'auto',
                         // height: 'auto',
                     });
                })
             }
      })
},
查看效果

1504.png

Bingo! 成功上传文件到OSS 并且成功显示到编辑界面中了

2.保存md文件到oss

首先我们写一个保存按钮(略)
md文档内容都保存在绑定的’text’参数中,所以我们需要将text保存为一个md文件,然后进行上传
利用Blob对象生成文件
let mdFile = new Blob([this.text],{ "type" : "text/plain;charset=utf-8" }); //利用Blob对象生成文件

然后操作逻辑和上传图片逻辑是一样的(获取oss加密参数->上传文件->得到oss地址->传给后端保存到数据库)

由于和选择本地文件上传的文件格式不同,我们重新写下上传文件的api接口
/**
 * md 文件直传oss
 * @param file
 * @param mdName
 * @param ossInfo
 * @returns {Promise<unknown>}
 */
 export const ossMDUpload=(file,mdName,ossInfo)=>{
    const files = file
    const point = mdName.lastIndexOf('.')
    const suffix = mdName.substr(point) // 获取文件后缀名
    const fileName = ossInfo.key + suffix
    let param = new FormData() // 创建form对象
    param.append('OSSAccessKeyId', ossInfo.OSSAccessKeyId)
    param.append('policy', ossInfo.policy)
    param.append('key', ossInfo.startsWith + fileName)
    param.append('success_action_status', 200)
    param.append('signature', ossInfo.signature)
    param.append('file', files, mdName)
    let config = {
        headers: {'Content-Type': 'multipart/form-data'}
    }
    // 添加请求头
    return new Promise((res,rej)=>{
        axios.post(ossInfo.host, param, config)
            .then(response => {
                console.log(response)
                if(response.status == 200){
                    console.log('上传成功')
                    res(response)
                }else{
                    rej(response);
                }
            })
    })
}

其实逻辑是一样的 只是多了个文件名的参数

界面的save方法

save(){
    let that = this;
    let mdFile = new Blob([this.text],{ "type" : "text/plain;charset=utf-8" }); //利用Blob对象生成文件
    //获取参数
    ossSign({}).then((res)=>{
        if(res.code == 200){
             let ossInfo = res.data;
             let fileName =  that.title+".md";
             let suffix = ".md";
             //进行上传
             ossMDUpload(mdFile,fileName,ossInfo).then((res)=>{
                 if(res.status == 200){
                      let url= `${ossInfo.host}/${ossInfo.startsWith}${ossInfo.key}${suffix}`
                      console.log("md文件路径:"+url);
                      //todo 将url传给后端,后端再进行入库操作          
                      }else{
                          that.$message.error("文件上传错误")
                      }
                        })
                 }
            })
    }
},
查看效果

1505.png

我们可以看到文件已经成功上传到oss了,我们再用浏览器访问下这个文件

1506.png

Bingo~

3.用md-preview 查看我们刚才上传的文件

我们在demo.js 中新增一个demoMDOSS接口用来获取我们刚上传的文件 (将demoMD中的url替换就可以了)

demo.js

export const demoMDOSS=()=>{
    return http.get("https://vitedemo.oss-cn-beijing.aliyuncs.com/demo/1638779297980.md", {});
}

mdShow.vue

import {demoMDOSS} from "../api/demo";
...
demoMDOSS({}).then((res)=>{
    console.log(res);
    this.content = res;
})
...
查看效果

1507.png

再次Bingo~

4.最后

写到这里,关于我的网站中的所有上传操作已经全部讲解完成了.

整体的流程如下:

1.前端端获取后端oss加密的签名,
2.前端获取签名后直接上传文件到oss
3.上传成功后获取OSS文件地址,传给后端进行入库操作
  • 前端访问文件资源:所有访问的都是OSS地址
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值