我正在尝试加载用户通过元素选择的图像.
我在输入元素中添加了一个onchange事件处理程序,如下所示:
<input type="file" name="picField" id="picField" size="24" onchange="preview_2(this);" alt=""/>
Run Code Online (Sandbox Code Playgroud)
而preview_2函数是:
var outImage ="imagenFondo";
function preview_2(what){
globalPic = new Image();
globalPic.onload = function() {
document.getElementById(outImage).src = globalPic.src;
}
globalPic.src=what.value;
}
Run Code Online (Sandbox Code Playgroud)
其中outImage具有我想要加载新图片的标签的id值.
但是,似乎onload永远不会发生,并且它不会向html加载任何内容.
我该怎么办?
And*_*y E 76
在支持File API的浏览器中,您可以使用FileReader构造函数在用户选择文件后读取文件.
document.getElementById('picField').onchange = function (evt) {
var tgt = evt.target || window.event.srcElement,
files = tgt.files;
// FileReader support
if (FileReader && files && files.length) {
var fr = new FileReader();
fr.onload = function () {
document.getElementById(outImage).src = fr.result;
}
fr.readAsDataURL(files[0]);
}
// Not supported
else {
// fallback -- perhaps submit the input to an iframe and temporarily store
// them on the server until the user's session ends.
}
}
Run Code Online (Sandbox Code Playgroud)
如果不支持File API,则不能(在大多数安全意识的浏览器中)从文件输入框中获取文件的完整路径,也无法访问数据.唯一可行的解决方案是将表单提交给隐藏的iframe,并将文件预先上传到服务器.然后,当该请求完成时,您可以将图像的src设置为上载文件的位置.
Mik*_*rty 46
正如iEamin在他的回答中所说,HTML 5现在支持这一点.他给出的链接http://www.html5rocks.com/en/tutorials/file/dndfiles/非常好.以下是基于该站点样本的最小样本,但请参阅该站点以获取更详尽的示例.
onchange
向HTML 添加事件侦听器:
<input type="file" onchange="onFileSelected(event)">
Run Code Online (Sandbox Code Playgroud)
制作带有id的图像标签(我指定height=200
确保图像在屏幕上不是太大):
<img id="myimage" height="200">
Run Code Online (Sandbox Code Playgroud)
这是onchange
事件监听器的JavaScript .它接受File
传递的对象event.target.files[0]
,构造a FileReader
来读取其内容,并设置新的事件侦听器以将结果data:
URL 分配给img
标记:
function onFileSelected(event) {
var selectedFile = event.target.files[0];
var reader = new FileReader();
var imgtag = document.getElementById("myimage");
imgtag.title = selectedFile.name;
reader.onload = function(event) {
imgtag.src = event.target.result;
};
reader.readAsDataURL(selectedFile);
}
Run Code Online (Sandbox Code Playgroud)
// convert file to a base64 url
const readURL = file => {
return new Promise((res, rej) => {
const reader = new FileReader();
reader.onload = e => res(e.target.result);
reader.onerror = e => rej(e);
reader.readAsDataURL(file);
});
};
// for demo
const fileInput = document.createElement('input');
fileInput.type = 'file';
const img = document.createElement('img');
img.attributeStyleMap.set('max-width', '320px');
document.body.appendChild(fileInput);
document.body.appendChild(img);
const preview = async event => {
const file = event.target.files[0];
const url = await readURL(file);
img.src = url;
};
fileInput.addEventListener('change', preview);
Run Code Online (Sandbox Code Playgroud)
$('document').ready(function () {
$("#imgload").change(function () {
if (this.files && this.files[0]) {
var reader = new FileReader();
reader.onload = function (e) {
$('#imgshow').attr('src', e.target.result);
}
reader.readAsDataURL(this.files[0]);
}
});
});
Run Code Online (Sandbox Code Playgroud)
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<input type="file" id="imgload" >
<img src="#" id="imgshow" align="left">
Run Code Online (Sandbox Code Playgroud)
小智 5
最简单的方法是创建一个对象 URL
<input onChanged={(event)=>{ URL.createObjectURL(event!.target!.files[0]) }} />
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
130342 次 |
最近记录: |