将图像拖放到输入字段时无法触发预览
I can't trigger a preview when dropping an image into an input field
我有一个上传图片到Cloudinary的投递框,效果很好,但是我无法在投递图片时触发预览功能。
这是HTML代码:
<div class="card text-muted">
<label id="upload" for="dropboxInput" class="card-block text-muted">
<input type="file" name="file" data-url="CLOUDINARY_URL"
data-form-data="{CLOUDINARY STUFF}"
data-cloudinary-field="file" class="cloudinary-fileupload"
multiple="multiple" style="display:none" id="dropboxInput">
</label>
</div>
这是触发该功能的代码,在单击下拉框后选择图像时可以正常工作:
var dropboxInput = document.getElementById("dropboxInput");
dropboxInput.onchange = function(){readURL(this)};
我已经试过了,但似乎没有得到 dropboxInput.value。图像一旦被上传就上传:
var dropbox = document.getElementById("dropbox");
dropbox.ondrop = function(){
readURL(dropboxInput);
};
这是预览函数,处理预览:
function readURL(input){
if(input.files){
for (i = 0; i < input.files.length; i++) {
var reader = new FileReader();
reader.onload = function(event) {
$($.parseHTML('<img>')).attr('src', event.target.result).appendTo(preview);
}
reader.readAsDataURL(input.files[i]);
}
}
}
在输入字段中,CLOUDINARY STUFF 是这样的:
<input type="file" name="file" data-url="https://api.cloudinary.com/v1_1/MYACCOUNT/auto/upload"
data-form-data="{"eager":"c_limit,h_768,w_1024","signature":"1f5c7426f428ebd02bb45180767fd920716cc59e","api_key":"185516472314647","eager_async":true,"callback":"/cloudinary_cors.html","tags":"Punta de Vistalegre,2","use_filename":true,"timestamp":"1527959323"}"
data-cloudinary-field="file" class="cloudinary-fileupload"
multiple="multiple" style="display:none" id="dropboxInput">
当删除图像时,我找不到将它们传递给 readURL() 函数的方法。
在此先感谢您的帮助。
当你在
dropbox.ondrop = function(){
readURL(dropboxInput.value);
};
而不是传递 dropboxIinput.value
尝试只传递 dropboxInput
因为您将参数视为 input
元素。
更新 1
我不确定在没有获得更多细节的情况下我能说清楚。但是,如果通过将文件放入 element#dropbox
,您的 input#dropboxInput
会发生变化,您可以这样编写您的函数:
function readURL(input){
if(input.files.length){
for (i = 0; i < input.files.length; i++) {
image_url = window.URL.createObjectURL(input.files[i]);
$("<img>", {
src: image_url
}).appendTo(preview);
}
}
}
解决方案是 cloudinary-fileupload 函数,它有 drop 选项,用于处理删除的文件。输入字段是使用此 Java 代码以编程方式生成的:
String html = cloudinary.uploader().imageUploadTag("file", options, htmlOptions);
这就是删除选项的实现:
$(".cloudinary-fileupload").cloudinary_fileupload({
...
drop: function(e, data){
readURL(data);
},
...
我有一个上传图片到Cloudinary的投递框,效果很好,但是我无法在投递图片时触发预览功能。
这是HTML代码:
<div class="card text-muted">
<label id="upload" for="dropboxInput" class="card-block text-muted">
<input type="file" name="file" data-url="CLOUDINARY_URL"
data-form-data="{CLOUDINARY STUFF}"
data-cloudinary-field="file" class="cloudinary-fileupload"
multiple="multiple" style="display:none" id="dropboxInput">
</label>
</div>
这是触发该功能的代码,在单击下拉框后选择图像时可以正常工作:
var dropboxInput = document.getElementById("dropboxInput");
dropboxInput.onchange = function(){readURL(this)};
我已经试过了,但似乎没有得到 dropboxInput.value。图像一旦被上传就上传:
var dropbox = document.getElementById("dropbox");
dropbox.ondrop = function(){
readURL(dropboxInput);
};
这是预览函数,处理预览:
function readURL(input){
if(input.files){
for (i = 0; i < input.files.length; i++) {
var reader = new FileReader();
reader.onload = function(event) {
$($.parseHTML('<img>')).attr('src', event.target.result).appendTo(preview);
}
reader.readAsDataURL(input.files[i]);
}
}
}
在输入字段中,CLOUDINARY STUFF 是这样的:
<input type="file" name="file" data-url="https://api.cloudinary.com/v1_1/MYACCOUNT/auto/upload"
data-form-data="{"eager":"c_limit,h_768,w_1024","signature":"1f5c7426f428ebd02bb45180767fd920716cc59e","api_key":"185516472314647","eager_async":true,"callback":"/cloudinary_cors.html","tags":"Punta de Vistalegre,2","use_filename":true,"timestamp":"1527959323"}"
data-cloudinary-field="file" class="cloudinary-fileupload"
multiple="multiple" style="display:none" id="dropboxInput">
当删除图像时,我找不到将它们传递给 readURL() 函数的方法。
在此先感谢您的帮助。
当你在
dropbox.ondrop = function(){
readURL(dropboxInput.value);
};
而不是传递 dropboxIinput.value
尝试只传递 dropboxInput
因为您将参数视为 input
元素。
更新 1
我不确定在没有获得更多细节的情况下我能说清楚。但是,如果通过将文件放入 element#dropbox
,您的 input#dropboxInput
会发生变化,您可以这样编写您的函数:
function readURL(input){
if(input.files.length){
for (i = 0; i < input.files.length; i++) {
image_url = window.URL.createObjectURL(input.files[i]);
$("<img>", {
src: image_url
}).appendTo(preview);
}
}
}
解决方案是 cloudinary-fileupload 函数,它有 drop 选项,用于处理删除的文件。输入字段是使用此 Java 代码以编程方式生成的:
String html = cloudinary.uploader().imageUploadTag("file", options, htmlOptions);
这就是删除选项的实现:
$(".cloudinary-fileupload").cloudinary_fileupload({
...
drop: function(e, data){
readURL(data);
},
...