How to Read Files with Vue
Apr 13, 2021
Using Vue's ref
property, you can easily read files
from <input>
. By specifying input type to file
and
giving the <input>
tag a ref
property, you can pull
the file into your methods and manipulate it as you deem
fit. Here is the code to preview the selected image:
const app = new Vue({
data: () => ({ example: null, image: false, preview: null }),
template: `
<div style="border-style:solid">
<input type="file" ref="file" @change="readFile()" />
<div v-if="Image">
<img :src="preview" />
</div>
</div>
`,
methods: {
readFile() {
this.example = this.$refs.file.files[0];
if (
this.example.name.includes(".png") ||
this.example.name.includes(".jpg")
) {
this.image = true;
this.preview = URL.createObjectURL(this.example);
} else {
this.image = false;
}
}
}
});
Here is a live demonstration:
File Reader
Using JavaScript's FileReader
class, you can read the
file and display it on the page.
const example = new Vue({
data: () => ({ file: null, content: null }),
template: `
<div style="border-style:solid">
<input type="file" ref="doc" @change="readFile()" />
<div>{{content}}</div>
</div>
`,
methods: {
readFile() {
this.file = this.$refs.doc.files[0];
const reader = new FileReader();
if (this.file.name.includes(".txt")) {
reader.onload = (res) => {
this.content = res.target.result;
};
reader.onerror = (err) => console.log(err);
reader.readAsText(this.file);
} else {
this.content = "check the console for file output";
reader.onload = (res) => {
console.log(res.target.result);
};
reader.onerror = (err) => console.log(err);
reader.readAsText(this.file);
}
}
}
});
Here is a live demonstration that will display the contents
of a .txt
file and print to the console the output for other
types of files:
Vue School has some of our favorite Vue
video courses. Their Vue.js Master Class walks you through building a real
world application, and does a great job of teaching you how to integrate Vue
with Firebase.
Check it out!
Did you find this tutorial useful? Say thanks by starring our repo on GitHub!