javascript - 上传图片并更改现有图片的来源
问题描述
我需要上传一张图片并将现有图片的来源设置为上传的一张
图片已上传,但新来源不起作用
<img class='avat' id='avat' src='ph/avat.jpg' alt='img'>
<input type='file' id='inpfile' accept=".jpg">
js
var imgavat = $('#avat');
var inpfile = $('#inpfile');
inpfile.on('change', function(){
var uid = $('.aact').attr('data-id');
var file = $(this).prop('files')[0];
var form = new FormData();
form.append('inpfile', file);
form.append('uid', uid);
$.ajax({
url: "a_members_pro_plus.php",
type: 'post',
cache: false,
contentType: false,
processData: false,
data: form,
success: function(data){
console.log(data); // avat/1.jpg - new source - ok
imgavat.attr('src', data); // doesn't work
inpfile.val('');
}
});
});
解决方案
您可以将FileReader与.readAsDataURL()结合使用,以获取文件并将其替换为头像。
当您使用inpfile在本地计算机上选择文件时,会触发更改事件。
在这种情况下,您需要测试是否有一个文件(用户选择了一个文件):
this.files[0]
如果文件存在,您可以实例化 FileReader(读取文件所需的)并向其添加加载端的处理程序:
var reader = new FileReader();
reader.onloadend = function () {
文件完全加载后,您可以更改头像的属性:
imgavat.attr('src', reader.result);
为了启动这个异步过程,您需要将文件作为数据 url 读取,以便更新头像 src 图像:
reader.readAsDataURL(this.files[0]);
片段:
var imgavat = $('#avat');
var inpfile = $('#inpfile');
inpfile.on('change', function() {
if (this.files[0]) {
var reader = new FileReader();
reader.readAsDataURL(this.files[0]);
reader.onloadend = function () {
imgavat.attr('src', reader.result);
};
}
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<img class='avat' id='avat' src='ph/avat.jpg' alt='img'>
<input type='file' id='inpfile' accept=".jpg">
推荐阅读
- java - 我的 Webview 应用程序在进行信使聊天时不断崩溃
- visual-studio-code - 如何仅使用键盘在终端中复制一行文本?
- c++ - CMake 将目录路径解释为 LIBRARY_OUTPUT_DIRECTORY 中的绝对路径与 RUNTIME_OUTPUT_DIRECTORY 中的相对路径
- java - 如何仅使用 if 语句检查范围
- java - android studio 通过 USB 与 arduino 进行串行通信
- c - 字符串连接在 C 中不起作用 (TDM-GCC-64)
- c - 将值设置为结构指针
- javascript - 文本基线的 Illustrator 脚本 (javascript)
- hyperledger-fabric - 错误:在结构 1.2 中找不到模块“结构客户端”
- javascript - 我们可以对 mocha 中的测试错误进行排序吗?