uniapp多图上传php接受不到怎么解决

uniapp是一种跨平台的应用开发框架,可以快速地开发出高质量的App,其中多图上传是一个常见的功能。但是在使用uniapp进行多图上传的过程中,可能会遇到接收不到图片的问题,特别是在使用PHP作为后端语言的情况下。本文介绍如何解决这种问题。

1.问题分析

在uniapp中,进行多图上传的方式是通过异步方式将图片发送到后端服务器,服务器解析接收到的图片,将其存储到指定的位置,最后返回响应信息,告诉前端是否上传成功。一般情况下,图片上传功能的实现分为两个步骤:

1.将图片数据转换为二进制流形式。

2.通过ajax或form表单提交方式,将图片二进制流发送到后台接口。

首先需要确定代码是否正确,包括前端的ajax或form表单提交方式是否正确,后端接口是否正确。如果代码没有问题,那可能是服务器未正确接收到请求。需要排查以下原因:

1.1 PHP.INI配置

在PHP.ini配置文件中,有一项配置项upload_max_filesize,这个配置项是上传文件的大小上线。如果上传的文件大小超过了这个设置,那么将不能上传成功。

可以通过以下方法查看是否设置大小上传上限:

1.打开命令行窗口,进入设置了PHP的目录下,输入php -i命令;

2.查找upload_max_filesize的配置信息。

如果upload_max_filesize的值设置为0,那么表示没有大小限制,如果是其它的值,那就是这个上传文件的上线大小,可以适当设置这个值。

1.2 服务器限制

可能是服务器限制,目录没有写入权限,可以在服务器上创建一个test.php脚本,写入以下代码:

<?php

$path = "./test/";

if (is_writeable($path)) {

echo "success";

} else {

echo "failed";

}

?>

这个脚本的作用是检测服务器对指定目录的读写权限。运行脚本后如果输出success,就说明此目录有写入权限,否则需要对此目录设置写入权限。

1.3 超时时间设置

如果上传的文件过大,可能会因为超时时间设置的问题而上传失败。可以在php.ini配置文件中找到max_execution_time配置项,这个配置项是php程序的最大运行时间,如果上传的文件比较大,需要设置一个较长的超时时间。

1.4 文件上传方法

文件上传的方法比较传统的方式就是使用form表单,但是更好的方式是使用异步方式进行上传。比如说,在前端使用uniapp的uploadFile接口,后端使用php中的move_uploaded_file函数进行文件移动。

2. 解决方案

2.1 前端代码

在前端代码中,实现多张图片的异步上传,代码如下:

uni.chooseImage({

count:9,

sizeType:['original','compressed'],

sourceType:['album','camera'],

success: function (result) {

for (let i = 0; i < result.tempFilePaths.length;i++){

let path = result.tempFilePaths[i];

uni.uploadFile({

url:'http://localhost/upload.php', //修改为后端接口地址

filePath:path,

name:'file',

header:{'content-type': 'multipart/form-data'},

success:function(res){

console.log(res.data);

}

});

}

}

})

在上面的代码中,我们通过uniapp的chooseImage接口选择了图片,并在成功回调中使用for循环遍历所有选中的图片路径,并使用uni.uploadFile接口将图片上传到指定的服务器。其中,url指向的是后端的接口地址,文件名为file,在header中设置content-type为multipart/form-data,表示这是一个multipart类型的数据。

2.2 后端代码

在后端代码中,需要接收前端传输的图片数据,保存图片文件,最终返回上传成功与否的信息。代码如下:

<?php

header('content-type:application/json;charset=utf-8');

if(empty($_FILES)){

header('HTTP/1.1 500 Internal Server Error');

echo json_encode(['msg'=>'failed']);

return;

}

$fileInfo = $_FILES['file'];

$fileName = $fileInfo['name'];

$tmpName = $fileInfo['tmp_name'];

$size = $fileInfo['size'];

$type = $fileInfo['type'];

$currentPath = dirname(__FILE__);

$uploadPath = $currentPath.'/uploads/';

if (!file_exists($uploadPath)) {

mkdir($uploadPath, 0777, true);

}

if(move_uploaded_file($tmpName,$uploadPath.$fileName)){

echo json_encode(['msg'=>'success']);

}else{

header('HTTP/1.1 500 Internal Server Error');

echo json_encode(['msg'=>'failed']);

}

?>

在上面的代码中,首先通过$_FILES变量获取到图片的相关信息。接着,我们判断是否有文件上传,如果没有,则返回上传失败的信息。如果有文件上传,就将文件存储到指定的目录中,最后返回上传成功的信息。

3.总结

本文介绍了uniapp多图上传php接受不到的问题以及解决方法,在实际的项目开发过程中,我们应该尽量采用异步上传的方式进行图片上传,这样可以提高用户体验,同时也可以减少请求响应时间,提高效率。同时,也应该注意到一些服务器配置的问题,比如文件的大小限制、目录权限设置、超时时间等,这些都可能会影响到文件上传的成功率。