请在下面是我的vue组件的脚本部分中的代码。
我正在获取所有输入字段,但图片和视频上传显示空值。
我试图解决这个问题,但无济于事。
playVideo(url) {
let video = $('#video-preview').get(0);
video.preload = 'metadata';
// Load video in Safari / IE11
if (url) {
video.muted = false;
video.playsInline = true;
video.play();
}
},
// Read a file input as a data URL.
readDataUrl(input, callback) {
if (input.files && input.files[0]) {
let fileReader = new FileReader();
fileReader.onload = function () {
callback(fileReader.result);
};
fileReader.readAsDataURL(input.files[0]);
}
else {
callback(null);
}
},
// Read a file input as an object url.
readObjectUrl(input, callback) {
if (input.files && input.files[0]) {
let fileReader = new FileReader();
fileReader.onload = function () {
let blob = new Blob([fileReader.result], {type: input.files[0].type});
let url = URL.createObjectURL(blob);
callback(url, blob);
};
fileReader.readAsArrayBuffer(input.files[0]);
}
else {
callback(null);
}
},
}
}
我想要实现的是上传图片和视频文件,在保存为blob之前预览它们。
上图显示了我的回复@samayo
图像和视频blob显示空值。
答案 0 :(得分:6)
如果您使用axios
或fetch
使用vue上传文件非常简单。
这是我当前项目的副本/面食。我使用axios上传图片:
首先,您需要让您的输入看起来像这样:
<input type="file" accept="image/*" @change="uploadImage($event)" id="file-input">
然后添加如下方法:
methods: {
uploadImage(event) {
const URL = 'http://foobar.com/upload';
let data = new FormData();
data.append('name', 'my-picture');
data.append('file', event.target.files[0]);
let config = {
header : {
'Content-Type' : 'image/png'
}
}
axios.put(
URL,
data,
config
).then(
response => {
console.log('image upload response > ', response)
}
)
}
}
答案 1 :(得分:6)
我认为在您的情况下,您正在寻找像这样的解决方案
示例:上传图片并在提交前预览
<template>
<div>
<img src:"previewImage" class="uploading-image" />
<input type="file" accept="image/jpeg" @change=uploadImage>
</div>
</template>
<script>
export default {
name:'imageUpload',
data(){
return{
previewImage:null
}
},
methods:{
uploadImage(e){
const image = e.target.files[0];
const reader = new FileReader();
reader.readAsDataURL(image);
reader.onload = e =>{
this.previewImage = e.target.result;
console.log(this.previewImage);
};
}
}
} // missing closure added
</script>
<style>
.uploading-image{
display:flex;
}
</style>
答案 2 :(得分:2)
我从其他几个人的答案中总结出来。
this.image
是base64编码的,可以发送到您的API。
<template>
<v-file-input
v-model="file"
chips
accept="image/*"
label="Image"
@change="onFileChange"
/>
</template>
<script>
export default {
data: { file: null, image: null },
methods: {
onFileChange() {
const reader = new FileReader()
reader.readAsDataURL(this.file)
reader.onload = e => {
this.image = e.target.result
console.log(this.image)
}
},
},
}
</script>
答案 3 :(得分:0)
如果要上传图像并在提交之前预览,可以选择使用简单实用的方法。
[(0, 1, 2, 3, 4), (6, 7, 8)]