经过上次的接口开发的失败经验,我痛定思痛打算看一下泛微自带的附件上传是怎么实现的(该页面为后端建模引擎的新建模版生成)
然后我再去浏览器查看了一下上传文件时触发的接口(域名已马赛克,原理应该相同)
及其负载参数
直接使用formData对象携带文件,这样应该就不怕文件出现损坏的现象,但是需要注意的是这个上传文件接口应该是属于高安全级别的接口,不能对外开放,所以我们不能直接修改配置文件使得该接口跳过登陆验证,故我们应用该接口的网页应用应该在这个上传接口同域名下部署(ecology部署的域名)才能触发。
最后总结一下在js如何实现上传附件
//上传进度
const uploadProgress = ref(0)
//是否上传
const isLoading = ref(false)
//el-upload的http-request属性注入的方法
function uploadFile(params){
//获取文件对象
const file = params.file;
//更新文件参数对象
const name = file.name;
//请求头
const config = {
headers: {
},
//进度回调
onUploadProgress: (e) => {
//此处绑定回调函数,更新文件上传进度
uploadProgress.value = parseInt(Math.floor((e.loaded / e.total) * 100));
}
}
const formData = new FormData()
formData.append('file', file)
formData.append('name', file.name)
formData.append('ts', Date.now())
//转化为上传状态显示进度条
isLoading.value = true
//请求数据
axios.post(`${你的ecology域名}/api/formmode/card/docUpload?detailtype=1&category=-1,-1,${文档id}&mainId=-1&subId=-1&secId=${文档id}`, formData, config)
.then(res => {
if(res.data.api_errormsg == ''){
ElMessage.success('文件上传成功');
//将附件id置入数组中
editData.value.wjfj = res.data.data.fileid
}else{
ElMessage.error(`${res.data.api_errormsg}`);
}
})
.catch(error => {
ElMessage.error('错误:' + error);
})
.finally(() => {
//上传结束
isLoading.value = false
//进度值归零
uploadProgress.value = 0
})
}
其中下列代码是获取上传文件的附件id
editData.value.wjfj = res.data.data.fileid
希望能够帮助到大家