美文网首页
客户端上传文件失败

客户端上传文件失败

作者: PENG先森_晓宇 | 来源:发表于2020-09-02 16:33 被阅读0次

背景

小程序上传图片,调用后台接口,后台接口获得文件后将该文件上传到oss上,最后返回给小程序前端oss图片路径。

发现大多数手机机型上传图片后,后台api是能获取到文件的,但是荣耀手机却获取不到小程序上传的图片file信息。

有时上传一些高清照片文件时,后台也接受不到文件,而且上述现象是偶发现象,所以很郁闷。

分析

偶发现象,所以毫无头绪,一次偶然,后台api打印了一次$_FILE全局变量,如下

array:1 [
  "file" => array:5 [
    "name" => "159667884882222.jpeg"
    "type" => ""
    "tmp_name" => ""
    "error" => 1
    "size" => 0
  ]
]

发现error为1,经查阅资料,$_FILES['file']['error']有以下几种值

  • 值为0,表示UPLOAD_ERR_OK,没有错误发生,文件上传成功。
  • 值为1,表示UPLOAD_ERR_INI_SIZE,上传的文件超过了 php.ini 中 upload_max_filesize选项限制的值。
  • 值为2,表示 UPLOAD_ERR_FORM_SIZE,上传文件的大小超过了 HTML 表单中 MAX_FILE_SIZE 选项指定的值。
  • 值为3,表示UPLOAD_ERR_PARTIAL,文件只有部分被上传。
  • 值为4,表示UPLOAD_ERR_NO_FILE,没有文件被上传。
  • 值为6, 表示UPLOAD_ERR_NO_TMP_DIR,找不到临时文件夹。PHP 4.3.10 和 PHP 5.0.3 引进。
  • 值为7,表示UPLOAD_ERR_CANT_WRITE,文件写入失败。PHP 5.1.0 引进。

现在恍然大悟,原来我们上传文件大小超过了php.ini参数的upload_max_filesize最大限制。

解决

  1. 小程序不调用上传图片api(小程序端),而是调用获取图片信息api,将获取的图片转换成base64,将该base64做为参数调用后台post接口,后台接口获取到该参数之后转换为图片,然后上传到oss,最后将oss路径返回给前端

  2. 小程序上传图片不调用后台api,直接小程序端调用oss上传图片,oss路径直接返回给前端。这样减少了和后台的交互。小程序上传图片至oss

  3. 修改php.ini文件中关于上传文件大小的参数。首先我们查看下php.ini文件默认的upload_max_filesize参数值为2M。



    其实在php.ini中影响上传文件大小的参数不只upload_max_filesize,影响参数有:

配置项 默认值 功能描述
file_uploads ON 确定服务器上的PHP脚本是否可以接受HTTP文件上传
memory_limit 8M 设置脚本可以分配的最大内存量,防止失控的脚本独占服务器内存
upload_max_filesize 2M 限制PHP处理上传文件的最大值,此值必须小于post_max_size值
post_max_size 8M 限制通过POST方法可以接受的信息最大量

可以看出在调大upload_max_filesize值的同时也的调大post_max_size的值。

最后一步就是修改我们的php.ini文件,也是最重要的一步。

首先我们需要找到php.ini的位置,方法有俩个

  • 执行命令
[root@ ~] php -i | grep php.ini
Configuration File (php.ini) Path => /usr/local/etc/php
  • 在phpinfo()页面中搜索php.ini,会找到php.ini的位置,如下


    image.png

在php7中,到/usr/local/etc/php目录下,我们发现并没有php.ini这个文件。有一个php.ini-development文件和php.ini-production文件。

此时我们将php.ini-production文件copy为php.ini,修改完参数后,重启php服务即可

最后在执行命令,将看到多出来一条Loaded Configuration File,则显示php.ini加载成功。

[root@ ~] php -i | grep php.ini
Configuration File (php.ini) Path => /usr/local/etc/php
Loaded Configuration File => /usr/local/etc/php/php.ini

相关文章

网友评论

      本文标题:客户端上传文件失败

      本文链接:https://www.haomeiwen.com/subject/ciewsktx.html