【问题标题】:Js drag&drop image/video upload with previewjs拖拽图片/视频上传带预览
【发布时间】:2017-07-27 22:01:29
【问题描述】:

我的目标是有一个用于视频和图像的拖放式上传框,它将按照框的确切形状和大小填充文件。

您可以在此处查看 sn-p:http://jsfiddle.net/ELcf6/4/

不知道如何将相同的视频上传功能添加到同一个盒子。将不胜感激。

这是sn-p:

var imageLoader = document.getElementById('filePhoto');
    imageLoader.addEventListener('change', handleImage, false);

function handleImage(e) {
    var reader = new FileReader();
    reader.onload = function (event) {
        
        $('.uploader img').attr('src',event.target.result);
    }
    reader.readAsDataURL(e.target.files[0]);
}
.uploader {position:relative; overflow:hidden; width:300px; height:350px; background:#f3f3f3; border:2px dashed #e8e8e8;}

#filePhoto{
    position:absolute;
    width:300px;
    height:400px;
    top:-50px;
    left:0;
    z-index:2;
    opacity:0;
    cursor:pointer;
}

.uploader img{
    position:absolute;
    width:302px;
    height:352px;
    top:-1px;
    left:-1px;
    z-index:1;
    border:none;
}
<div class="uploader" onclick="$('#filePhoto').click()">
    click here or drag here your images for preview and set userprofile_picture data
    <img src=""/>
    <input type="file" name="userprofile_picture"  id="filePhoto" />
</div>

【问题讨论】:

    标签: javascript image video drag-and-drop


    【解决方案1】:

    与其说是一个建议,不如说是一个修复,但是作为以前必须进行客户端上传的人,我发现使用http://www.dropzonejs.com/ 非常容易。

    【讨论】:

    • 既然这是一个建议而不是修复/回答,难道不应该将其作为评论而不是答案发布吗?
    【解决方案2】:

    您要搜索的关键字是:createObjectURL

    https://developer.mozilla.org/en-US/docs/Web/API/URL/createObjectURL

    但是,浏览器必须支持它。

    【讨论】:

    • 嘿耶勒!非常感谢!我会检查一下,看看它是否适合我:)
    【解决方案3】:

    好的,因此您尝试从视频文件中提取图像数据,这不一定有效。您实际上需要的是一个隐藏的视频字段和 html5 画布。当您放置视频文件时,您会填充视频源,然后在检测到任何图像数据后立即通过画布播放它,您将能够以与您相同的方式显示它图片。在 StackOverflow 上有很多关于如何通过画布播放视频的答案,实际上放在一起并不难。

    【讨论】:

    • 嗨,维克,感谢您抽出宝贵时间发表评论!我会调查的。希望我能很快弄清楚
    • 我想说的最简单的选择是,当您删除视频时,您实际上填充了视频字段的 src,寻找中间并禁用控件并应用相同的样式。
    【解决方案4】:

    我已经更新了你的 JSFiddle 来做你想做的事情Jsfiddle 我仅在 chrome 中对其进行了测试,它可以工作。根据您的需要进行更新。

    function handleImage(e) {
        var filetype = imageLoader.files[0].type;
    var reader = new FileReader();
    reader.onload = function (event) {
        if(filetype.indexOf("image") > -1){
        $('.uploader img').attr('src',event.target.result);
        }else if(filetype.indexOf("video") > -1){
    
        $('.uploader video')[0].src =reader.result; 
        }
    
    }
    reader.readAsDataURL(e.target.files[0]);
    

    }

    请确保在脚注中删除兼容的视频。并非所有视频文件都会显示。

    【讨论】:

    • 嘿维克,谢谢一百万!它确实有效!惊人的!但是,您认为有没有办法在上传后在该窗口中播放视频?
    • 更新:我尝试将它添加到我的 Wordpress 中,但它无法正常工作,但它可以在 jsfiddle.net/ELcf6/568 上工作 - 它让我很生气 :(
    • 是的,从技术上讲,您应该需要将自动播放参数添加到要播放的视频元素中。 link
    • 另外,如果您发布指向您的 WP(或 pm 我)网站的链接,我可能会提供帮助。但请注意,您并没有真正上传该文件,它会尝试播放您的本地文件。
    • 要上传它,您需要从视频文件生成一个 Blob 并通过 Ajax 将其上传到您的站点,然后引用您刚刚上传的文件并从那里播放。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-11-17
    • 2019-09-09
    • 2015-07-22
    相关资源
    最近更新 更多