当前位置: 首页 > 面试题库 >

在Google Chrome / Chromium和Safari中拖放文件上传?

江华容
2023-03-14
问题内容

拖放文件上传可以在Firefox 3.6中完成。

通过Google搜索 html5拖放文件上传-
gmail,可以看到以下
内容:

  • http://www.appelsiini.net/2009/10/html5-drag-and-drop-multiple-file-upload
  • http://www.thecssninja.com/javascript/drag-and-drop-upload

所有这些指南都使用FileReader(或不推荐使用Firefox 3.6 getAsBinary,也没有其他浏览器支持)。

但是,Google最近发布了Gmail更新,该更新允许在Chromium和Firefox中上传和拖放文件,而Chromium没有FileReader。我每晚都使用最新的Chromium,它可以拖放上传文件,但不支持FileReader

我见过有人提到,可以通过拖放到上进行拖放上载<input type="file" />,但一次只能支持一个文件,而Gmail的上载器可以处理被拖放到其上的多个文件,因此显然不是它们在做。

所以问题是,他们怎么做到的?您如何支持Chromium上载HTML5文件?另外,您可以支持Safari吗?


问题答案:

警告: 这是非常旧版本的Safari和Chrome的兼容性代码。 现代的浏览器都支持FileReader
API。这是一个教程:https : //developer.mozilla.org/zh-
CN/docs/Using_files_from_web_applications

现在,仅在出于某些原因需要支持Safari 5和更高版本或Chrome 6和更高版本的情况下,此代码才有用。

一种可能性是使用SwellJS中使用的方法:

<input type="file" multiple="multiple" />像这样使用:

<form method="post" enctype="multipart/form-data" id="uploadform">
  <input type="file" name="dragupload[]" multiple="multiple"
  onchange="if (this.value) document.getElementById('uploadform').submit();" />
</form>

可以设置输入元素的样式,使其具有opacity:0并(绝对)位于接受上载的元素上。整个表单可以放置在iframe类似“Ajax”的行为中。并且上载元素可以是隐藏的层,直到在其上拖动某些东西为止。

这样的iframe如下所示:

<script>
<!--
  var entered = 0;
-->
</script>
<body ondragenter="entered++;document.getElementById('uploadelement').style.display='block'" ondragleave="entered--;if (!entered) document.getElementById('uploadelement').style.display='none'">
  <form method="post" enctype="multipart/form-data" id="uploadform">
    Things can be dragged and dropped here!
    <input type="file" id="uploadelement" name="dragupload[]" multiple="multiple" onchange="if (this.value) { document.getElementById('uploadform').submit(); }" style="display:none;position:absolute;top:0;left:0;right:0;bottom:0;opacity:0;" />
  </form>
</body>

仅当检测到Safari或Chrome时才应执行此操作(因为其他浏览器不支持拖放到<input type="file"/>元素上),并且可以与dropFirefox 3.6+ 的HTML5 事件结合使用。

我无法确定这是否是Gmail使用的方法,但它当然也可以使用。



 类似资料:
  • 我用WordPress开发了一个网站。我在主页上放了一段视频,它在Chrome,Mozila和IE中运行良好,但在Safari中运行良好。我已经使用了html5视频标签,有没有人可以建议我如何在Safari播放MP4视频?这是我正在使用的代码播放视频在我的网站。 上面的代码工作得很好,但在Safari中除外。有什么flash播放器解决方案播放MP4视频吗?

  • 问题内容: 如今,我们可以将文件拖放到一个特殊的容器中,并使用XHR2上载它们。带有实时进度条等。非常酷的东西。 但是有时候我们不想要那么酷。我想要的是一次将文件拖放 到标准HTML文件输入中 :。 那可能吗?有什么方法可以从文件拖放中用正确的文件名(?)“填充”文件输入吗?(出于文件系统安全性原因,完整的文件路径不可用。) 为什么? 因为我想提交一份普通表格。适用于所有浏览器和所有设备。拖放只是

  • 问题内容: 我正在尝试向我的SwiftUI Mac应用程序添加“拖放”手势/功能。 我想将文件从系统/桌面拖放到应用程序中。我发现它可以在常规Swift中使用。我现在正尝试在SwiftUI中执行此操作。 我在SwiftUI for Views中找到了一个函数。但是,看起来这仅适用于应用程序内部的内部手势。我想从外面拖文件。 在Swift中,您需要为拖动的类型注册NSView。 我想创建一个NSVi

  • 我目前正在尝试通过调用一个以MultiPartFormData作为输入的资源来编写一个IT测试。 它在应用程序“正常”启动时工作,但在使用DropwizardAppRule助手启动时不工作。 这是我的代码: QORUS_APP的发音如下: 我收到以下错误: 消息找不到媒体类型=多部分/表单数据,类型=类组织.玻璃鱼.泽西岛.媒体.多部分.表单数据多部分,通用类型=类组织.玻璃鱼.泽西岛.媒体.多部

  • 本文向大家介绍跨浏览器拖放HTML文件上传?,包括了跨浏览器拖放HTML文件上传?的使用技巧和注意事项,需要的朋友参考一下 对于跨浏览器的HTML File Uploader,请使用FileDrop。它几乎可以在所有现代Web浏览器上使用。 根据官方规范- FileDrop是一个独立的跨浏览器,用于HTML5,旧版,AJAX,拖放,JavaScript文件上传

  • 作为桌面程序,当然希望能够实现操作系统的 drag & drop 功能。 很多网站已经支持拖拽文件 Electron 当然也支持 要在 app 中实现此功能 ,你需要在 Render 进程中调用webContents.startDrag(item) API, 此API会给 Main 进程发送一个ondragstart事件。 在 Render 进程中, 接收 ondragstart 事件并发送消息到