原生的文件拖拽上传

简介: 原生的文件拖拽上传
<h1>原生拖拽上传</h1>
<h3>请拖拽您的头像到下方区域</h3>
<div id="container"></div>
<script>
  /*拖拽的目标对象------ document 监听drop 并防止浏览器打开客户端的图片*/
        这里是全局的方法 不太友好 参考下面container,ondrop的写法
   document.ondragover = function (e) {
      e.preventDefault(); //只有在ondragover中阻止默认行为才能触发 ondrop 而不是 ondragleave
  };
  document.ondrop = function (e) {
    e.preventDefault(); //阻止 document.ondrop的默认行为  *** 在新窗口中打开拖进的图片
  };
  /*拖拽的源对象----- 客户端的一张图片 */
  /*拖拽目标对象-----div#container  若图片释放在此元素上方,则需要在其中显示*/
  container.ondragover = function (e) {
    e.preventDefault();
  };
  container.ondrop = function (e) {
            在这里取消掉默认的跳转事件即可 不然会影响到全局的方法
            e.preventDefault();
    console.log(e);
    console.log(e.dataTransfer.files);
    //        chrome 此处的显示有误
    var list = e.dataTransfer.files;
    for (var i = 0; i < list.length; i++) {
      var f = list[i];
      //            console.log(f);
      reader(f);
      //            读取指定文件的内容 作为“数据URL”
      //            reader.readAsDataURL(f);
      //            当客户端文件读取完成 触发onload事件
    }
  };
  async function reader(file) {
    // 这里能获取到拖拽过来的文件了
    // 我这边是经过了一层s3上传 如果不需要可以去掉
    // 根据具体的业务去处理
    console.log(file);
    const s3Url = await fetch(
      "s3urlxxxxx",
      {
        method: "GET",
        headers: {
          "Content-Type": "image/png",
          authorization:
            "Bearer xxxxxx",
        },
      }
    )
      .then((res) => {
        return res.json();
      })
      .then((data) => {
        return data.item;
      });

    const imgsUrl = await fetch(s3Url, {
      method: "PUT",
      headers: {
        "Content-Type": "image/png",
      },
      body: file,
    }).then((res) => {
      if (res.url) {
        return res.url.split("?")[0];
      }
    });

    console.log(imgsUrl);

    var img = new Image();
    img.src = imgsUrl;
    container.appendChild(img);
  }
</script>

相关文章
|
JavaScript 对象存储
JS - 阿里云 OSS 文件下载通用办法(支持跨域)
JS - 阿里云 OSS 文件下载通用办法(支持跨域)
4324 0
JS - 阿里云 OSS 文件下载通用办法(支持跨域)
|
前端开发 JavaScript
前端上传基础
只是上传流程,
170 0
|
8月前
|
数据安全/隐私保护 开发者 iOS开发
上传IPA后需要多久才能在构建版本中看到应用?
上传IPA后需要多久才能在构建版本中看到应用?
|
8月前
|
数据安全/隐私保护 开发者 iOS开发
上传 IPA 后需要多久才能在构建版本中看到应用?
上传 IPA 后需要多久才能在构建版本中看到应用?
|
8月前
|
存储 安全 Linux
构建一个atf必须读点gic的原生文档
构建一个atf必须读点gic的原生文档
98 0
如何自定义Flutter日志上传本地系统
Dart中可以通过try/catch/finally来捕获代码块异常,这个和其他编程语言类似,如果读者不清楚,可以查看Dart语言文档,不再赘述,下面我们看看Flutter中的异常捕获。
如何自定义Flutter日志上传本地系统
|
存储 前端开发 JavaScript
后端文件上传以及下载功能实现
上一章讲到前端文件下载功能的实现,之前也讲过前端文件上传功能的实现,这一章就讲一下后端怎么接收前端上传的文件,以及怎么实现文件下载功能。
445 0
|
缓存 CDN
U3D客户端框架之支持断点续传的文件下载器实现方案
文件下载器是应用程序的基础模块,为应用程序与外部网络交互提供了必要的桥梁。该模块设计初衷是为了热更新过程中,下载CDN站点上的文件资源,所以下载器会验证 要下载的文件是否存在于CDN中。如果存在允许下载器继续工作;如果不存在会跳过本地下载。做这层检测是为了安全性考虑,不允许随意下载网络资源。如果有需求可以跳过这层检测。
|
小程序 API
uniapp的midButton的使用(是否支持小程序)?
uniapp的midButton的使用(是否支持小程序)?
uniapp的midButton的使用(是否支持小程序)?
html+css实战35-上传多个文件功能
html+css实战35-上传多个文件功能
130 0
html+css实战35-上传多个文件功能