JQuery - 拖放文件 - 如何获取文件信息?

2024-04-14

有兴趣使用 JQuery/AJAX/PHP 构建自己的拖放文件上传。

基本上,我想要一个文件上传器,我的网站的用户可以将文件从他们的计算机拖到我创建的 div 中,然后它将为他们上传文件到选定的目的地。

我想从头开始构建它,而不使用任何插件,以便我可以更好地操纵限制(文件类型、大小、目标文件夹等)

谷歌搜索了一下,没有成功,只有插件。无论如何可以引导我走向正确的方向吗?

UPDATE好吧,所以我想出了如何做我想做的事。只需将文件输入字段的不透明度设置为 1,使其隐藏,您仍然可以将文件拖到该常规区域中,如果您点击文本字段,它会捕获它。但是,我想知道如何增加文件输入字段的高度/宽度(尝试了文件上的基本 css,但它只会增加“浏览”按钮的大小,而不是可以将文件放入的实际字段。有什么想法如何做到这一点? 我基本上想要一个大的方形 div,上面写着“将文件拖放到此处”。所以我需要调整输入字段的大小。


只是为了插话一下,因为过去几天我也一直在这样做。据我了解,如果您通过 jQuery 绑定 drop 事件,您需要访问该事件event.dataTransfer对象通过经过event.originalEventjQuery 提供的事件中的对象。

Example:

在此我绑定到dragoverdrop事件,因为这是防止它执行默认操作所必需的(在此处找到解决方案:防止默认操作。仅适用于镀铬 https://stackoverflow.com/questions/14282367/prevent-the-default-action-working-only-in-chrome )

$('#dropzone').bind('dragover drop', function(event) {
    event.stopPropagation(); 
    event.preventDefault();
    if (event.type == 'drop') {
        console.log(event.originalEvent.dataTransfer.files);
    }
});

另外似乎还有一个错误,如果你console.log() the event.dataTransfer (or event.originalEvent.dataTransfer)它的文件数组为空,这里指出:ondrop 触发时 event.dataTransfer.files 为空? https://stackoverflow.com/questions/11573710/event-datatransfer-files-is-empty-when-ondrop-is-fired

为了更好地回答OP问题(我刚刚注意到它的其余部分,我知道它已经过时了,但有些人可能会发现这很有帮助):

我的实现是用 jQuery 实现的,所以我希望没问题:

var files = [];

// Attaches to the dropzone to pickup the files dropped on it. In mine this is a div.
$("#dropzone").bind('dragover drop', function(event) {
    // Stop default actions - if you don't it will open the files in the browser
    event.stopPropagation();
    event.preventDefault();

    if (e.type == 'drop') {
        files.push(event.originalEvent.dataTransfer.files);
    }
});

// Attach this to a an input type file so it can grab files selected by the input
$("#file-input").bind('change', function(event) {
    files.push(event.target.files);
});

// This is a link or button which when clicked will do the ajax request 
// and upload the files
$("#upload-button").bind('click', function(event) {
    // Stop the default actions
    event.stopPropagation();
    event.preventDefault();

    if (files.length == 0) {
        // Handle what you want to happen if no files were in the "queue" on clicking upload
        return;
    }

    var formData = new FormData();
    $.each(files, function(key, value) {
        formData.append(key, value);
    });

    $.ajax({
        url: 'upload-ajax',
        type: 'POST',
        data: formData,
        cache: false,
        dataType: 'json',
        processData: false, // Don't process the files - I actually got this and the next from an SO post but I don't remember where
        contentType: false, // Set content type to false as jQuery will tell the server its a query string request
        success: function(data, textStatus, jqXHR) { /* Handle success */ },
        error: function(jqXHR, textStatus, errorThrown) { /* Handle error */ }
    });

});

您还可以绑定到已接受答案中的其他事件来执行效果,例如使拖放区淡入,以便您可以看到它(这在我的图书馆的待办事项列表中)。然而,这是我实际使用的 ajax 文件上传的核心。

我确实没有一种方便的方法来测试它,但这本质上就是我的做法(我基本上从我一直在制作的库中获取了所有代码,并对其进行了调整,以一种简单的方式适应此处的通用代码块)理解方式)。希望这可以帮助一些人。从这里开始,实际上很容易继续添加文件队列列表,并且能够从队列中删除文件,所以这应该是一个非常好的起点。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

JQuery - 拖放文件 - 如何获取文件信息? 的相关文章

  • Wordpress 主题管理面板显示本地服务器中的致命错误

    我有一个 WordPress 项目 这里我们使用主题jupiter 当我在本地 XAMPP 服务器上设置它时 它的主题选项不起作用 这个问题出在我的电脑上 但在另一台电脑上却正常 My XAMPP是最新版本 它显示的错误 Fatal err
  • 如何循环 $_POST 将每个帖子字段作为参数传递给函数?编辑[关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • 如何在 PHP 中运行 ffmpeg 命令

    我需要在 PHP 中运行 ffmpeg 命令 但是 php ffmpeg 不再支持最新版本并且已经过时 我可以知道在网络文件中运行 ffmpeg 命令的替代方法吗 PHP Javascript jQuery 我尝试exec and shel
  • 使用 preg_split 分割和弦和单词

    我正在编写一小段播放处理歌曲标签的代码 但我遇到了一个问题 我需要解析每首歌曲选项卡行并将其拆分以获取大块chords一方面 并 且words在另一个 每个块就像 line chunk array 0 gt part of line con
  • 将表中的行相对于另一个表拖放[关闭]

    Closed 这个问题需要调试细节 help minimal reproducible example 目前不接受答案 嘿 我有两个行数相同的表 例如 如果我尝试对 tableOne 中的一行 例如 row 3 进行排序 则其他表 tabl
  • 正则表达式匹配7-12位数字;可能包含空格或连字符

    我已经尝试解决 PHP 正则表达式问题有一段时间了 但我就是无法完全完成 我需要编写一个匹配 7 到 12 位数字 0 9 的正则表达式 并且可以选择在相邻数字之间有一个连字符或一个空格 这就是我到目前为止所拥有的 match1 preg
  • 在 php 中比较两个日期的正确方法是什么? [复制]

    这个问题在这里已经有答案了 我需要将数据库中的日期与当天进行比较 这是我的代码 雄辩地说 posts Post where date date Y m d gt get 我只想检索今天的帖子 知道 日期 字段的类型为日期 我该如何使其工作
  • 如何通过csv文件仅更新sql表的一列

    我有一个 csv 文件包含一些数据 在我的 Sql 数据库中 我有一个具有多个列名的表 现在我只想通过 csv 文件更新一列 谢谢 你可以这样尝试 Import the csv file to a temp table Update you
  • Laravel Eloquent ORM 事务

    Eloquent ORM 非常好 尽管我想知道是否有一种简单的方法可以像 PDO 一样使用 innoDB 设置 MySQL 事务 或者我是否必须扩展 ORM 才能实现这一点 你可以这样做 DB transaction function 闭包
  • jQuery 1.4.2 VSDoc

    在哪里可以获得 jQuery 1 4 2 的 VSDoc 喜欢冒险的人可以从 2949 开始添加以下几行 delegate function selector types data fn
  • 使用 php 和 jquery 的简单彗星示例

    谁能给我一个使用 PHP 的彗星技术的简单好例子 我只需要一个使用持久 HTTP 连接或类似连接的示例 我不想使用轮询技术 因为我已经设置了类似的东西 并且不仅难以使用和管理它的大量资源 另外我使用的是 IIS7 而不是 Apache 一个
  • 如何为 HTML 验证提供自定义验证错误消息?

    当我使用默认 HTML 验证时 它会显示默认错误消息 这不是我想向客户显示的 我需要自定义消息并为每个验证提供不同的信息 例如最小 最大 类型和要求 例如 该字段为必填项 值不匹配 参考传统的HTML代码
  • 如果我想让我的网站跨平台兼容和屏幕阅读器兼容,我应该避免使用 javascript 、 jquery 、 flash 、 ajax 、 silverlight 吗?

    如果我想让我的网站跨平台兼容 PC iPHONE 其他手机 PDA 和 Accessible 兼容屏幕阅读器 我是否应该避免使用 JavaScript jQuery flash Ajax Silverlight 我应该只使用 xhtml c
  • 如何在php项目中使用Piwik设备检测器?

    我想用php 设备检测器 https github com piwik device detector这是著名的 Piwik 项目的一部分 但我不明白如何在我的 php 代码中包含和使用该代码 我不想使用作曲家 I wrote
  • 针对较小屏幕的拆分表行

    我有一个固定宽度为 960px 有 5 列的表格 当我在移动设备中查看时 我想制作第 3 4 5 列 看起来就像在下一行 有什么方法可以让 CSS 打断一行 使其看起来像这样 但是 还保留原来的HTML代码吗 您可以使用 FlexBox f
  • WPF 的拖放列表框

    我正在寻找一个简单的ListBox具有内置的拖放功能 我认为 Silverlight 4 工具包有 The BoxList应该可以 通过拖放项目重新排序 从一个项目中拖动项目BoxList到另一个 显示拖动项目的预览 幽灵版本 显示放置位置
  • Jquery 手风琴默认不折叠

    我正在使用 bootstrap 提供的折叠插件 这是一个 jquery 简单插件 但是它默认折叠 如何修改以使折叠项默认隐藏 只有当我按下标题时 该项目才会折叠并显示 谢谢 插件的文档 只有几行 所以只需要一分钟 http twitter
  • 使用php获取多个复选框名称/id

    如何使用 PHP 获取提交时多个选定复选框的名称或 ID 以下是示例表格 谢谢
  • 如何在禁用按钮上启用 Bootstrap 工具提示?

    我需要在禁用的按钮上显示工具提示 并在启用的按钮上删除它 目前 它的工作原理是相反的 扭转这种行为的最佳方法是什么 rel tooltip tooltip
  • Java 将函数添加到 json 对象而不使用引号。

    我正在用 java 构建一个 json 对象 我需要将一个函数传递到我的 javascript 中并使用 jquery isFunction 对其进行验证 我遇到的问题是我必须将 json 对象中的函数设置为字符串 但 json 对象将周围

随机推荐