In recent years, front-end frameworks have become the tool of choice for many front-end developers, among which vue.js is favored by developers for its easy learning curve and easy maintenance. In vue.js, implementing the file upload function is one of the very common requirements, and batch upload is used by various websites. So how to implement batch upload in vue.js? The following will introduce in detail how vue.js implements batch upload.
1. Simple file upload
Before introducing batch upload, let’s first take a look at the simple single file upload implementation in vue.js. Assume that the file we want to upload is as follows:
<input type="file" @change="handleFileUpload"/>
Add the handleFileUpload function in the methods of vue.js to handle file upload:
handleFileUpload() { const file = event.target.files[0]; //获取文件对象 const formData = new FormData(); //建立FormData对象 formData.append('file', file); //将文件添加到FormData中 axios.post('/file/upload', formData)//使用axios发送post请求上传文件 .then(response => { console.log(response);//上传成功后的响应结果 }) }
In this code, we use the axios library to Send a post request to upload the file, but this can also be achieved using any other library or native ajax. Of course, in actual projects, we may need to use Authentication Token or CSRF Token to ensure security.
2. Multiple file upload
After understanding single file upload, let’s introduce the method of vue.js to implement multi-file upload. Add the input of multi-select files in html:
<input type="file" ref="fileInput" @change="handleMultipleFileUpload" multiple>
Then add the handleMultipleFileUpload function in methods:
handleMultipleFileUpload() { const files = this.$refs.fileInput.files;//获取上传的文件对象 const formData = new FormData();//建立FormData对象 for(let i=0 ;i<files.length ;i++){ formData.append('files', files[i]);//将文件添加到FormData对象中 } axios.post('/file/multiple_upload', formData)//发送post请求上传多个文件 .then(response => { console.log(response);//上传成功后的响应结果 }) }
Through this code, we can upload multiple files. Different from a single file, we need to Add files to the formData object in sequence. I believe you can already understand how to simply upload multiple files in vue.js.
3. Implement multi-file upload with progress bar
However, the above multi-file upload function needs to be further expanded. For example, if we want to display the upload progress bar, instead of knowing the upload status only after the upload is successful, we need to use the XMLHttpRequest object to implement the upload progress bar. The code is as follows:
handleMultipleFileUpload() { const files = this.$refs.fileInput.files;//获取上传的文件对象 const formData = new FormData(); //建立FormData对象 for(let i=0 ;i<files.length ;i++){ formData.append('files', files[i]); //将文件添加到FormData对象中 } const xhr = new XMLHttpRequest();//创建XMLHttpRequest对象实现进度条 //upload.addEventListener用于上传进度监听 xhr.upload.addEventListener("progress", function(evt){ if(evt.lengthComputable){ const percentComplete = Math.round(evt.loaded * 100 / evt.total);//计算上传进度 console.log(`上传进度:${percentComplete}%`); } }, false); //ajax完成后触发的事件 xhr.onreadystatechange=function(evt){ if(xhr.readyState===4){//上传完成 console.log(xhr.responseText);//上传完成后的响应结果 } } //发送post请求上传文件 xhr.open("POST", "/file/multiple_upload"); xhr.send(formData); }
In fact, when we upload special files such as streaming media and large amounts of files, the above upload method may be limited. Therefore, it is very necessary to understand the types of uploaded files, file size restrictions, network speed, user needs, etc., and choose the corresponding upload method.
To sum up, this article introduces the method of vue.js to realize single file upload and multi-file upload, and realizes the effect of upload progress bar through XMLHttpRequest object. I believe these methods can help you better complete the file upload function. At the same time, in actual projects, it is also necessary to consider how the back-end server handles uploaded files and how to prevent file leaks and data tampering and other related issues.
The above is the detailed content of How to write code for vue batch upload. For more information, please follow other related articles on the PHP Chinese website!