简介
环境准备
在开始之前,请确保您已经安装了 Node.js 和 npm,并且熟悉 Vue.js 的基本概念。以下是一个简单的 Vue 项目搭建流程:
# 安装 Vue CLI
npm install -g @vue/cli
# 创建一个新项目
vue create photo-upload-app
# 进入项目目录
cd photo-upload-app
# 运行项目
npm run serve
图片上传组件
<template>
<div>
<input type="file" @change="handleFileChange" />
<img :src="previewImage" alt="Image Preview" v-if="previewImage" />
</div>
</template>
<script>
export default {
data() {
return {
file: null,
previewImage: null,
};
},
methods: {
handleFileChange(event) {
const file = event.target.files[0];
if (!file) return;
this.file = file;
const reader = new FileReader();
reader.onload = (e) => {
this.previewImage = e.target.result;
};
reader.readAsDataURL(file);
},
},
};
</script>
图片上传到服务器
import axios from 'axios';
methods: {
uploadImage() {
const formData = new FormData();
formData.append('image', this.file);
axios.post('https://yourserver.com/upload', formData, {
headers: {
'Content-Type': 'multipart/form-data',
},
})
.then(response => {
console.log('Image uploaded successfully:', response.data);
})
.catch(error => {
console.error('Image upload failed:', error);
});
},
},
图片上传优化
methods: {
compressImage(file, quality) {
const reader = new FileReader();
reader.onload = (e) => {
const img = new Image();
img.onload = () => {
const canvas = document.createElement('canvas');
const ctx = canvas.getContext('2d');
canvas.width = img.width;
canvas.height = img.height;
ctx.drawImage(img, 0, 0, canvas.width, canvas.height);
canvas.toBlob((blob) => {
const compressedFile = new File([blob], file.name, {
type: file.type,
lastModified: Date.now(),
});
this.file = compressedFile;
this.uploadImage();
}, file.type, quality);
};
img.src = e.target.result;
};
reader.readAsDataURL(file);
},
},