分享web开发知识

注册/登录|最近发布|今日推荐

主页 IT知识网页技术软件开发前端开发代码编程运营维护技术分享教程案例
当前位置:首页 > 代码编程

通过fromdata实现上传文件

发布时间:2023-09-06 01:36责任编辑:傅花花关键词:暂无标签

其实呢,文件上传的插件很多,可是现在做的东西要求尽量少用插件,所以就自己写了一下。

之前也用node写过对文件处理方面的东西,这次用php写着试一下。

a.html文件

<!DOCTYPE html> ?<html xmlns="http://www.w3.org/1999/html"> ?<head> ?????<meta http-equiv="content-type" content="text/html; charset=utf-8"/><html> ?<head> ?<title></title> ?</head> ???<body> ?<form enctype="multipart/form-data" id="uploadImg"> ???上传文件: ?????<input name="file" type="file" id="file"> </form></body> ?</html><script src="jquery.js"></script><script> ???$(function(){ ???????$(‘input[type="file"]‘).on(‘change‘, function(){ ???????????var file = this.files[0]; ???????????var formData = new FormData($(‘#uploadImg‘)[0]); ???????????formData.append(‘file‘, file); ???????????console.log(formData.get(‘file‘)) ???????????$.ajax({ ???????????????url: ‘b.php‘, ???????????????type: ‘POST‘, ???????????????cache: false, ???????????????data: formData, ???????????????//dataType: ‘json‘, ???????????????//async: false, ???????????????processData: false, ???????????????contentType: false, ???????????}).done(function(res) { ???????????????console.log(res) ???????????}).fail(function(res) { ???????????????console.log(res) ???????????}); ???????}); ???})</script> ?

b.php文件:

<?php ???//print_r($_FILES); ???????$uptypes=array( ?????????‘image/jpg‘, ?????????‘image/jpeg‘, ?????????‘image/png‘, ?????????‘image/pjpeg‘, ?????????‘image/gif‘, ?????????‘image/bmp‘, ?????????‘image/x-png‘ ?????); ???$max_file_size=200000000; ????//上传文件大小限制, 单位BYTE ???????$file=$_FILES["file"]; ???$fileName=$file["name"]; ???$filetype = $file["type"]; ???$filesize = $file["size"]; ???????if(!in_array($filetype, $uptypes)){ ???????????// 文件类型判断 ???????echo "文件类型不符!"; ???????exit; ???} ???if($filesize > $max_file_size){ ???????????????// 文件大小判断 ???????echo "文件太大!"; ???????exit; ???????} ???????if (!is_dir("image/")) { ???????????????????//创建路径 ???????mkdir("image/"); ???} ???$url = "image/"; ???//当文件存在 ???if (file_exists($url.$fileName)) { ???????//echo $fileName." already exists."; ???????echo $url.$fileName; ???}else{//当文件不存在 ???????$url=$url.$fileName; ???????move_uploaded_file($_FILES["file"]["tmp_name"],$url); ???????echo $url; ???}?>

在这当中也遇到了几个问题

1.在PHP中通过print_r($_FILES)打印时,有时候formData里面的参数type会为空,而在前端打印的formData.get(‘file‘)里是有type的值的,原因是PHP导入文件(我是导的图片)有大小限制

解决方法:在php.ini中,搜索upload_max_filesize(默认为2M),修改这个值,重启服务器即可。

2:在通过ajax进行数据请求时,console.log(formData)对象为空,而且在append后还是为空,是因为属性不是直接挂载在你这个FormData,可以通过get方法进行获取。

参考:https://segmentfault.com/q/1010000010087308

3:在一般情况下使用ajax请求,processData(默认为true)不需要设置,但是当使用fromdata上传文件时,发送的对象不需要转化为对象,所以必须设置为true。

通过fromdata实现上传文件

原文地址:https://www.cnblogs.com/sk-3/p/8194903.html

知识推荐

我的编程学习网——分享web前端后端开发技术知识。 垃圾信息处理邮箱 tousu563@163.com 网站地图
icp备案号 闽ICP备2023006418号-8 不良信息举报平台 互联网安全管理备案 Copyright 2023 www.wodecom.cn All Rights Reserved