该功能用于判断用户选择的文件是否为图片文件。如果是图片文件,则进行预览;如果不是图片文件,则提供下载功能。
- 下载:如果选择的文件不是图片文件,提供下载按钮,用户可以点击按钮下载文件。
- 预览:如果选择的文件是图片文件,页面将显示该图片的预览。
该功能可以集成到你的 Vue.js 项目中,提供文件选择、预览和下载的操作。
-
文件选择:通过
<input type="file">
标签允许用户选择文件,并通过@change
事件触发文件处理逻辑。 -
文件类型判断:
- 使用
file.type.startsWith('image/')
判断文件是否为图片文件。 - 如果是图片,执行图片预览;否则,显示下载按钮。
- 使用
- 图片预览逻辑:
- 使用
FileReader
将图片文件读取为 Data URL。 - 将 Data URL 设置为
<img>
标签的src
,从而显示图片预览。
- 使用
- 非图片文件的下载:
- 使用
URL.createObjectURL(file)
创建临时 URL。 - 创建一个
<a>
标签并设置href
为该 URL,点击链接触发下载。
- 使用
<template>
<div>
<h1>下载文件和图片</h1>
<label for="file-input">选择文件:</label>
<input type="file" id="file-input" @change="handleFileSelect" />
<!-- 图片预览 -->
<div v-if="isImage" class="preview-container">
<h2>文件预览:</h2>
<img :src="imagePreview" alt="预览图片" />
</div>
<!-- 下载按钮 -->
<button v-if="!isImage" @click="downloadFile">下载文件</button>
</div>
</template>
<script>
export default {
data() {
return {
file: null, // 存储选择的文件
isImage: false, // 标记文件是否为图片
imagePreview: '', // 图片预览的Data URL
};
},
methods: {
handleFileSelect(event) {
const file = event.target.files[0]; // 获取选择的文件
if (file) {
this.file = file;
// 判断是否为图片文件
if (file.type.startsWith('image/')) {
this.isImage = true;
this.previewImage(file); // 图片预览
} else {
this.isImage = false;
}
}
},
previewImage(file) {
const reader = new FileReader();
reader.onload = (e) => {
this.imagePreview = e.target.result; // 设置图片预览的Data URL
};
reader.readAsDataURL(file); // 读取文件为Data URL
},
downloadFile() {
// 创建临时下载链接
const url = URL.createObjectURL(this.file);
const a = document.createElement('a');
a.href = url;
a.download = this.file.name; // 设置下载文件的名称
a.click(); // 触发下载
URL.revokeObjectURL(url); // 释放临时URL
}
}
};
</script>
<style scoped>
.preview-container {
margin-top: 20px;
}
img {
max-width: 100%;
height: auto;
}
button {
margin-top: 20px;
}
</style>