前言
最近项目有个文件上传的功能,需要前端在通过文件上传组件上传文件之后,将获取到的文件,转换成buffer格式(二进制格式)的数据传递给后端。
一、怎样获取文件并转换成二进制流传递给后端?原始文件的获取,我们这里是通过第三方组件来实现的。这里,以我在项目中用到的第三方组件tdesign上传组件为例,
点击获取文件,就可以在当前的电脑中获取,想要的文件。
组件代码如下:
//组件
<t-upload
v-model="files"
placeholder="批量上传"
theme="file-flow"
:requestMethod="requestMethod"
multiple
:auto-upload="false">
</t-upload>
<script>
export default {
data() {
return {
files: [],
};
},
methods: {
requestMethod(files) {
return new Promise((resolve, reject) => {
let reader = new FileReader();
reader.readAsArrayBuffer(files.raw);//files.raw这个是原始文件对象
reader.onload = function(e) {
try {
let res = e.target.result;//ArrayBuffer
let buf = Buffer.from(res);//Buffer
let json_data = JSON.parse(JSON.stringify(buf));//转换成json,是为了获取buffer里面的data(二进制数据
// 发送上传文件的请求
request({
url: 'xxxx',
method: 'POST',
data: {
file_name: files.name,
file_buf: json_data.data//buffer
}
}).then(res => {
//这里是第三方组件要求的格式
resolve({
status: 'success',
response: {
url: "xxxx"//文件上传成功之后,返回的url
}
})
})
} catch (error) {
//这里是第三方组件要求的格式
reject({
status: 'fail'
})
}
}
})
}
},
};
</script>
总结
怎么说尼,自己还是对这些问题的理解能力不行,最开始就没有搞清楚这个自定义组件到底是怎么封装的,要怎么才能让控制台不报错。我也是够菜的。看不懂这个api文档。
可能是因为太着急了,所以没有好好看,还怪这个文档写的不够清楚。后面才发现,原来别人写的还是很清楚了。我解决这个问题,也不是重新看的API文档,而是直接找到这个开源组件库的源码,看着别人报错,处理自己的自定义上传代码封装。所以说,再遇见问题的时候,大家,一定要沉着冷静。慢慢思考。!!!也是告诫我自己,问题的解决,慌是没有用滴。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)