首页 > 其他分享 >本地文件操作

本地文件操作

时间:2023-02-20 20:46:33浏览次数:29  
标签:文件 const evt await 本地 操作 imgData data defineComponent

获取本地文件

input file

<template>
  <a-card title="input 获取文件" style="width: 300px">
    <input type="file" ref="fileRef" multiple @change="handleFileChange" />
    <ul>
      <li v-for="(file, index) of fileList" :key="index">{{ file.name }}</li>
    </ul>
  </a-card>
</template>

<script lang="ts">
import { defineComponent } from "vue";

export default defineComponent({
  data() {
    return {
      fileList: [],
    };
  },
  methods: {
    handleFileChange() {
      const fileRef = this.$refs.fileRef;
      this.fileList = fileRef?.files || [];
      console.log(fileRef, this.fileList);
    },
  },
});
</script>

拖拽

<template>
  <a-card title="拖拽 获取文件" style="width: 300px">
    <div @dragover="handleDragover" @drop="handleDrag" class="drag-area">
      拖拽到这
    </div>
    <ul>
      <li v-for="(file, index) of fileList" :key="index">{{ file.name }}</li>
    </ul>
  </a-card>
</template>

<script lang="ts">
import { defineComponent } from "vue";

export default defineComponent({
  data() {
    return {
      fileList: [],
    };
  },
  methods: {
    handleDrag(evt) {
      evt.preventDefault();
      this.fileList = evt?.dataTransfer?.files || [];
    },
    handleDragover(evt) {
      evt.preventDefault();
    },
  },
});
</script>

showOpenFilePicker

兼容性

<template>
  <a-card title="filePicker 获取文件" style="width: 300px">
    <a-button type="primary" @click="handleOpenFilePicker">打开文件</a-button>
    <img
      v-for="(dataUrl, index) of imgList"
      :key="index"
      width="200"
      height="200"
      :src="dataUrl"
      alt=""
    />
  </a-card>
</template>

<script lang="ts">
import { defineComponent } from "vue";

export default defineComponent({
  data() {
    return {
      imgList: [],
    };
  },
  methods: {
    async handleOpenFilePicker() {
      const pickerOpts = {
        types: [
          {
            description: "Images",
            accept: {
              "image/*": [".png", ".gif", ".jpeg", ".jpg"],
            },
          },
        ],
        excludeAcceptAllOption: true,
        multiple: true,
      };
      const fileHandlers = await window.showOpenFilePicker(pickerOpts);
      this.imgList = [];
      for (const fileHandle of fileHandlers) {
        // 获取文件内容
        const fileData = await fileHandle.getFile();
        const fr = new FileReader();
        fr.readAsDataURL(fileData);
        fr.onload = () => this.imgList.push(fr.result);
      }
    },
  },
});
</script>

保存文件

兼容性

<template>
 <a-card title="保存文件" style="width: 300px">
   <a-textarea v-model:value="text" :rows="4" />
   <a-button type="dashed" @click="handleSave">保存</a-button>
   <a-button type="primary" @click="handleSaveAs">另存为</a-button>
 </a-card>
</template>

<script lang="ts">
import { defineComponent } from "vue";

export default defineComponent({
 data() {
   return {
     text: "",
     fileHandler: null,
   };
 },
 methods: {
   async showSaveFilePicker() {
     const options = {
       types: [
         {
           description: "Test files",
           accept: {
             "text/plain": [".txt"],
           },
         },
       ],
     };
     this.fileHandler = await window.showSaveFilePicker(options);
     return this.fileHandler
   },
   async handleSave(evt) {
     evt.preventDefault();
     this.fileHandler = this.fileHandler || await this.showSaveFilePicker()
     const writable = await this.fileHandler.createWritable();
     await writable.write(this.text);
     await writable.close();
   },
   async handleSaveAs(evt) {
     this.fileHandler = null;
     await this.handleSave(evt);
   },
 },
});
</script>

canvas转换图片数据

<template>
  <a-card title="canvas转换图片数据" style="width: 300px">
    <canvas id="c1" width="200" height="200"></canvas>
  </a-card>
</template>

<script lang="ts">
import { defineComponent } from "vue";

export default defineComponent({
  data() {
    return {
      fileList: [],
    };
  },
  mounted() {
    this.drawImage();
  },
  methods: {
    drawImage() {
      const c1 = document.getElementById("c1");
      const ctx = c1.getContext("2d");
      const img = new Image();
      img.src = "./img/img.png";
      img.onload = function () {
        ctx.drawImage(img, 0, 0, 200, 200);
        // 该api不接受file协议
        const imgData = ctx.getImageData(0, 0, 200, 200);
        for (let i = 0; i < imgData.data.length; i += 4) {
          imgData.data[i] = 255 - imgData.data[i];
          imgData.data[i + 1] = 255 - imgData.data[i + 1];
          imgData.data[i + 2] = 255 - imgData.data[i + 2];
          imgData.data[i + 3] = 255;
        }
        ctx.putImageData(imgData, 0, 0);
      };
    }
  },
});
</script>

标签:文件,const,evt,await,本地,操作,imgData,data,defineComponent
From: https://www.cnblogs.com/qingzhao/p/17138848.html

相关文章

  • 2.20 资源文件 消息断点
    1.创建对话框点击查看代码实现按钮点击获取编辑框的值获取参数1实现按钮点击获取编辑框的值获取参数1实现按钮点击获取编辑框的值获取参数1实现按钮点击获取编辑框的......
  • 操作符
    真-非0 假-0&&-逻辑与#include<stdio.h>intmain(){inta=2;intb=5;//intc=a&&b;//真-非0假-0&&-逻辑与intc=a||b;//||逻辑或printf("c......
  • 操作符
    真-非0 假-0&&-逻辑与#include<stdio.h>intmain(){inta=2;intb=5;//intc=a&&b;//真-非0假-0&&-逻辑与intc=a||b;//||逻辑或printf("c......
  • 文件分段上传和下载
    1、RandomAccessFile简介RandomAccessFile类是一个随机读取文件数据的java类,常用于分片上传和下载,使用方法和InputStream类似,不同之处在与其构造方法,需要传入mode,mode有四......
  • 常用包管理工具, 国内换源操作以及源地址收集(npm, yarn, pip, docker, linux, github
    常用包管理工具的换源本文将保持更新,以适应不同时代软件源的变化;如发现软件源失效请留言提醒常用包管理工具,国内换源操作以及镜像源地址收集(npm,yarn,pip,doc......
  • 【技术分享】线程本地存储(Thread Local Storage, TLS)
    开源项目:https://girakoo.com/官方文档:https://learn.microsoft.com/en-us/windows/win32/procthread/using-thread-local-storage简介线程本地存储(TLS),可以使多个线程,通......
  • Docker的初步认识,安装与基本操作
    一、Docker概述1、Docker的概念•Docker是一个开源的应用容器引擎,基于go语言开发并遵循了apache2.0协议开源•Docker是在Linux容器里运行应用的开源工具,是一种轻量级......
  • 用jquery.form.js 实现ajax提交含有上传文件和普通字段的表单
    前两天用到ajax提交含上传图片的表单。实现的功能比较简单,但是使用ajax提交表单form.serialize只能实现普通的字段提交,上传图片却不能使用。网上很多都是推荐使用jquer......
  • odoo 给列表视图添加按钮实现数据文件导入
    实践环境Odoo14.0-20221212(CommunityEdition)代码实现模块文件组织结构说明:为了更好的表达本文主题,一些和主题无关的文件、代码已略去odoo14\custom\estate│_......
  • layui文件上传前进行表单验证
    <buttontype="submit"lay-submit=""lay-filter="BeforeUpload"class="layui-btn"><iclass="layui-icon"></i>上传</but......