300字范文,内容丰富有趣,生活中的好帮手!
300字范文 > javascript – ajax结合html5中的file实现文件上传 后台用PHP接收 该如何用PHP接收传过来的formData?

javascript – ajax结合html5中的file实现文件上传 后台用PHP接收 该如何用PHP接收传过来的formData?

时间:2022-05-10 10:42:37

相关推荐

javascript – ajax结合html5中的file实现文件上传 后台用PHP接收 该如何用PHP接收传过来的formData?

后端开发|php教程

php,html5,javascript,ajax

后端开发-php教程

如何用PHP接收前端传输过来的文件,formdata这个对象的文件到是什么类型的二进制的数据吗?

前端代码:

自助解析源码,ubuntu打开c语言,tomcat7界面,如何创建爬虫文件,七牛云php上传图片,seo管理优势lzw

var file = document.querySelector("#file"); file.onchange = function(){ var files = this.files; for(var i=0;i<files.length;i++){ ajax(ajax.php,files[i],function(data){console.log(data)console.log(fn) }) } } function ajax(url,data,fn){ var xhr = new XMLHttpRequest(); xhr.onreadystatechange = function(){ if(xhr.readyState==4&&xhr.status==200){fn(xhr.responseText) } } var formData = new FormData(); formData.append(file,data); xhr.open(POST,url,true); //xhr.setRequestHeader(Content-Type, application/x-www-form-urlencoded); xhr.send(formData); }

php代码:

oa时时彩php源码,ubuntu模糊搜文件,tomcat输入域名默认页,网格爬虫如何制作,西瓜视频无水印php接口,seo实战运营lzw

不知道为什么if(!empty($_FILES[‘file’]))这判断一直false,改用if(!empty($_POST[‘file’]))也是一样;哪位知道后台是如何接收传过来的文件的吗?可不可以给个demo的PHP文件!

存储类网站源码,ubuntu桌面远程连接,爬虫爬取操作,ectouch php,seo ipo mbolzw

回复内容:

如何用PHP接收前端传输过来的文件,formdata这个对象的文件到是什么类型的二进制的数据吗?

前端代码:

var file = document.querySelector("#file"); file.onchange = function(){ var files = this.files; for(var i=0;i<files.length;i++){ ajax(ajax.php,files[i],function(data){console.log(data)console.log(fn) }) } } function ajax(url,data,fn){ var xhr = new XMLHttpRequest(); xhr.onreadystatechange = function(){ if(xhr.readyState==4&&xhr.status==200){fn(xhr.responseText) } } var formData = new FormData(); formData.append(file,data); xhr.open(POST,url,true); //xhr.setRequestHeader(Content-Type, application/x-www-form-urlencoded); xhr.send(formData); }

php代码:

不知道为什么if(!empty($_FILES[‘file’]))这判断一直false,改用if(!empty($_POST[‘file’]))也是一样;哪位知道后台是如何接收传过来的文件的吗?可不可以给个demo的PHP文件!

我在php中加了3个日志记录:

file_put_contents(/tmp/tmp.log, $_FILES.":\n".print_r($_FILES, true)."\n\n", FILE_APPEND);file_put_contents(/tmp/tmp.log, $_POST.":\n".print_r($_POST, true)."\n\n", FILE_APPEND);file_put_contents(/tmp/tmp.log, $_SERVER.":\n".print_r($_SERVER, true)."\n\n", FILE_APPEND);

存储路径改成tmp了,其他没变,得到的结果:

[root@localhost tmp]# cat tmp.log $_FILES:Array( [file] => Array ( [name] => Screenshot_-01-01-08-11-30.jpg [type] => image/png [tmp_name] => /tmp/phposvIcw [error] => 0 [size] => 30920 ))$_POST:Array()$_SERVER:Array( [USER] => nginx [HOME] => /var/lib/nginx [FCGI_ROLE] => RESPONDER [SCRIPT_FILENAME] => /var/www/test.php [SCRIPT_NAME] => /test.php [PATH_INFO] =>[QUERY_STRING] =>[REQUEST_METHOD] => POST [CONTENT_TYPE] => multipart/form-data; boundary=----WebKitFormBoundaryiJpJZSxazdqa8hzb [CONTENT_LENGTH] => 31127 [REQUEST_URI] => /test.php [DOCUMENT_URI] => /test.php [DOCUMENT_ROOT] => /var/www [SERVER_PROTOCOL] => HTTP/1.1 [GATEWAY_INTERFACE] => CGI/1.1 [SERVER_SOFTWARE] => nginx/1.6.3 [REMOTE_ADDR] => 192.168.255.1 [REMOTE_PORT] => 60032 [SERVER_ADDR] => 192.168.255.128 [SERVER_PORT] => 80 [SERVER_NAME] =>[REDIRECT_STATUS] => 200 [HTTP_HOST] => 192.168.255.128 [HTTP_CONNECTION] => keep-alive [HTTP_CONTENT_LENGTH] => 31127 [HTTP_ORIGIN] => http://192.168.255.128 [HTTP_USER_AGENT] => Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.103 Safari/537.36 [HTTP_CONTENT_TYPE] => multipart/form-data; boundary=----WebKitFormBoundaryiJpJZSxazdqa8hzb [HTTP_ACCEPT] => */* [HTTP_DNT] => 1 [HTTP_REFERER] => http://192.168.255.128/test.html [HTTP_ACCEPT_ENCODING] => gzip, deflate [HTTP_ACCEPT_LANGUAGE] => zh-CN,zh;q=0.8,ja;q=0.6,en;q=0.4 [PHP_SELF] => /test.php [REQUEST_TIME_FLOAT] => 1470377177.1168 [REQUEST_TIME] => 1470377177)

文件成功上传

[root@localhost tmp]# lltotal 36-rw-r--r-- 1 nginx nginx 30920 Aug 5 14:06 Screenshot_-01-01-08-11-30.jpg-rw-r--r-- 1 nginx nginx 1705 Aug 5 14:06 tmp.log[root@localhost tmp]#

没有出错……

先来个打印看看啊!先别用if判断。直接

echo FILES:.var_dump($_FILES);echo POST:.var_dump($_POST);die();

看看是什么东东。然后在一步一步的来

F12看请求啊

楼主用$_REQUES接收试一下吧。

你也可以直接传base64编码

打开chrome的控制台看看请求Request发送了什么,主要看请求头的Content-Type和请求体

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。