当前位置:首页 > 技术分析 > 正文内容

Vue小知识:如何在前端处理上传文件

ruisui883个月前 (02-03)技术分析10

转载说明:原创不易,未经授权,谢绝任何形式的转载

在开发前端应用程序时,有时我们可能需要允许用户上传图像文件。稍后,我们可以处理图像文件,并在必要时将其发送到后端进行进一步处理和存储。最常见的图像文件格式是PNG、JPEG和JPG。

当用户上传图片时,我们必须首先将文件内容嵌入为base64或文件,并将信息附加到formData中,然后再将其与请求体一起发送。

将图像文件嵌入formData时,必须将其作为键值对包含在内。键应表示包含图像文件的主体数据的名称,相应的值应包含实际的图像文件。我们还需要确保设置正确的头部编码类型为 multipart/form-data

multipart/form-data 是一种HTML表单编码类型,用于当我们的表单包含任何 <input type="file"> 元素时使用。当一个表单包含文件输入时,必须在HTML表单标签的enctype属性中使用"multipart/form-data",以确保在服务器端进行正确的数据传输和处理。

formData提供了一个我们可以使用各种操作来操作的对象。其中一些最常见的操作包括:

  1. formData.append():用于向指定对象键添加新值。
  2. formData.get(): 用于检索与特定键关联的第一个值。
  3. formData.delete(): 用于从formData对象中删除键/值对。

图片上传

<script setup lang="ts">
import { ref } from 'vue'
import axios from 'axios';
const selectedFile = ref();
async function onFileSelected(event: Event) {
  if (!event.target)
    return
  const target = event.target as HTMLInputElement
  if (!target.files) {
    // toastError('No image selected')
    return
  }
  console.log(target.files)
  selectedFile.value = target.files
}

async function submitImageForm(){
  const config = {
    headers: {
      "Content-Type": "multipart/form-data",
    },
  };
  try{
  // Your backend endpoint for image upload
    const uploads_url = 'https://api.your-backend-url.com/upload';
    let formData = new FormData();
    formData.append("photo", selectedFile.value);
    const res = await axios.post(`${uploads_url}`, formData, config);
    const data = await res.json();
    console.log(data)
  }catch(error: unknown){
  // Catch errors here and handle them accordingly
    if (axios.isAxiosError(error) && error.response) {
      console.log(error.response.data.message)
      return
    }
    // handle other errors here 
    console.log(error)
  }
}
</script>

<template>
    <h2>Upload Image</h2>
    <form method="post" enctype="multipart/form-data">
        <label for="image">Select an image to upload:</label>
        <input type="file" id="image" name="image" accept="image/*" @change="onFileSelected">
        <br>
        <input type="submit" value="Upload Image" @click="submitImageForm">
    </form>
</template>

有一件重要的事情需要注意,那就是确保您使用与后端期望的formData一致的正确键名。这是必要的,因为它作为上传图像数据的标识符,并且后端将使用它来访问请求负载中的图像。

当您需要上传多个图片时,您可以像这样将 multiple 属性传递给输入字段。

<input
  id="image"
  type="file"
  name="image"
  accept="image/*"
  @change="onFileSelected"
  multiple
/>

当您将上传的图像内容记录到控制台时,您将收到类似于下面截图示例中显示的元数据。

结论

我们已经看到了如何上传图像文件,提取图像数据,将其附加到formData中,并使用适当的头部编码类型将其发送到后端。

由于文章内容篇幅有限,今天的内容就分享到这里,文章结尾,我想提醒您,文章的创作不易,如果您喜欢我的分享,请别忘了点赞和转发,让更多有需要的人看到。同时,如果您想获取更多前端技术的知识,欢迎关注我,您的支持将是我分享最大的动力。我会持续输出更多内容,敬请期待。

扫描二维码推送至手机访问。

版权声明:本文由ruisui88发布,如需转载请注明出处。

本文链接:http://www.ruisui88.com/post/787.html

标签: vue url传参
分享给朋友:

“Vue小知识:如何在前端处理上传文件” 的相关文章

react hooks自定义组件居然能这样做

前言  这里写一下如何封装可复用组件。首先技术栈 react hooks + props-type + jsx封装纯函数组件。类组件和typeScript在这不做讨论,大家别白跑一趟。接下来会说一下封装可复用组件的思路,比如一个新手应该怎么去封装,都需要有哪些东西。  然后说一些复杂组件需要的功能,...

Git 分支管理策略与工作流程

(预警:因为详细,所以行文有些长,新手边看边操作效果出乎你的预料)团队开发中,遵循一个合理、清晰的Git使用流程,是非常重要的。否则,每个人都提交一堆杂乱无章的commit,项目很快就会变得难以协调和维护。看完这篇文章后,涉及GIT的工作中就会减少因为规范问题导致工作出错,当然如果你现在暂时还未有合...

壹啦罐罐 Android 手机里的 Xposed 都装了啥

这是少数派推出的系列专题,叫做「我的手机里都装了啥」。这个系列将邀请到不同的玩家,从他们各自的角度介绍手机中最爱的或是日常使用最频繁的 App。文章将以「每周一篇」的频率更新,内容范围会包括 iOS、Android 在内的各种平台和 App。本期继续歪楼,由少数派撰稿作者@壹啦罐罐介绍他正在使用的...

15款测试html5响应式的在线工具

手机、平板灯手持设备的增多,网站要顺应变化,就必须要做响应式开发,响应式网站最大的特点在于可以在不同设备下呈现不同的布局,是基于html5+css3技术,目前越来越多的网站开始采用了响应式设计,而下面15款工具可以方便测试你的html5响应式效果。Responsinatorhttp://www.re...

多项修正 尼康D4s发布最新1.10版固件

尼康公司与2014年8月27日发布了D4s的最新固件,固件版本号为C:1.10。这次固件升级,主要解决了一些BUG,并且对拍摄菜单与相机操作做了一定调整。下面是本次新固件的具体信息:尼康发布D4s最新C固件 1.10版对C固件升级到1.10版所作的修改:当选定运动VR模式并换上 AF-S 尼克尔 4...

Vue学习笔记之动态路由的参数传递应用及技巧

路由的参数传递:①通过params的类型· 配置路由格式:/router/:id· 传递的方式:在path后面跟上对应的值· 传递后形成的路径:/router/list,/router/profile这个就是前两篇中提到的"动态路由"中有应用过这个方法:②通过query的类型(对象方...