【前后端】文件上传与接收的流程
Prism's Blog Lv2

具体流程

先废话一会 当你知道文字数据怎么前传后的时候 突然传文件是不是脑子一热?被这个坑害惨了 所以来给自己提个醒 也给跟我一样迷惑的解答一下

前端到后端 示意图

Axios 解析

当选择完文件后 双向绑定的配置项会变成一个File

1
2
3
4
5
data(){
return {
img: File
}
}

接着用formData 以key value的方式 把图片放进value里

1
2
3
4
5
6
7
8
9
10
11
12
13
14
const axios = require('axios');
const formData = new FormData();
formData.append('file', File);
formData.append('key1','value1');
formData.append('key2','value2');
// 在头部设置类型为 form-data
const headers = { 'Content-Type': 'multipart/form-data' };
axios.post(`url`, formData, { headers }).
then((res) => {
// 正确执行后
}).catch(function (error) {
// 错误所执行的
window.alert(error);
});
keyvalue
file图片文件
key1value1
key2value2

PHP解析

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
// 可以传入一个名字为图片保存的名字
function UploadImg($fill_name){
// 允许上传的图片后缀
$allowedExts = array("webp", "jpg", "png");
// 分割字符串为数组 xxx.png 变成了 ['xxx'] ['png']
$temp = explode(".", $_FILES["file"]["name"]);
// end取数组最后一个值
$extension = end($temp); // 获取文件后缀名
// 判断文件类型
if ((($_FILES["file"]["type"] == "image/webp")
|| ($_FILES["file"]["type"] == "image/jpg")
|| ($_FILES["file"]["type"] == "image/png"))
&& ($_FILES["file"]["size"] < 1024000) // 小于 200 kb
&& in_array($extension, $allowedExts))
{
if ($_FILES["file"]["error"] > 0)
{
return "错误:" . $_FILES["file"]["error"];
}
else
{
// 判断是否有同名文件
if (file_exists("./$fill_name.$extension"))
{
return "文件/ID已存在,请勿重复上传";
}
else
{
// 路径 将缓存的文件复制到某个路径里
move_uploaded_file($_FILES["file"]["tmp_name"], "./$fill_name.$extension");
return "成功上传文件";
}
}
}
else
{
return "文件格式只允许 jpg png webp 或 文件大小超过1M";
}
}
  • 本文标题:【前后端】文件上传与接收的流程
  • 本文作者:Prism's Blog
  • 创建时间:2023-01-14 12:53:46
  • 本文链接:https://blog.msirp.cn/2023/01/14/【前后端】文件上传与接收的流程/
  • 版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!