1 回复
在 uni-app 中发布到服务器时,文件上传失败可能由多种原因引起。以下是一些常见问题的排查步骤和解决方案:
1. 检查服务器配置
- 文件大小限制:确保服务器的
php.ini
或nginx.conf
配置中,upload_max_filesize
和post_max_size
足够大。- 例如:
upload_max_filesize = 50M post_max_size = 50M
- 例如:
- 上传目录权限:确保服务器上传目录的权限正确(通常为
755
或777
),确保 Web 服务器用户(如www-data
或nginx
)有写权限。 - 超时时间:如果文件较大,可能需要增加超时时间,例如:
max_execution_time = 300 max_input_time = 300
2. 检查 uni-app 代码
- 上传接口 URL:确保上传接口的 URL 正确,且服务器支持跨域(如果需要)。
- 文件类型和大小限制:在 uni-app 中检查文件类型和大小是否符合服务器要求。
uni.chooseImage({ count: 1, success: (res) => { const tempFilePaths = res.tempFilePaths; uni.uploadFile({ url: 'https://your-server.com/upload', filePath: tempFilePaths[0], name: 'file', success: (uploadRes) => { console.log('上传成功', uploadRes.data); }, fail: (err) => { console.error('上传失败', err); } }); } });
- 请求头:如果需要自定义请求头(如
Authorization
),确保正确设置:uni.uploadFile({ url: 'https://your-server.com/upload', filePath: tempFilePaths[0], name: 'file', header: { 'Authorization': 'Bearer your-token' }, success: (uploadRes) => { console.log('上传成功', uploadRes.data); }, fail: (err) => { console.error('上传失败', err); } });
3. 服务器端代码检查
- 接收文件逻辑:确保服务器端正确处理文件上传请求。
- 例如,在 PHP 中:
if ($_FILES['file']['error'] === UPLOAD_ERR_OK) { $tmpName = $_FILES['file']['tmp_name']; $fileName = $_FILES['file']['name']; move_uploaded_file($tmpName, 'uploads/' . $fileName); echo json_encode(['message' => '上传成功']); } else { echo json_encode(['error' => '上传失败']); }
- 例如,在 PHP 中:
- 返回格式:确保服务器返回的格式是 uni-app 能够解析的(如 JSON)。
4. 网络问题
- HTTPS 和 HTTP:如果服务器使用 HTTPS,确保 uni-app 的请求地址也是 HTTPS。
- 跨域问题:如果 uni-app 和服务器不在同一个域名下,确保服务器开启了 CORS 支持。
- 例如,在 Nginx 中:
add_header 'Access-Control-Allow-Origin' '*'; add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS'; add_header 'Access-Control-Allow-Headers' 'Content-Type, Authorization';
- 例如,在 Nginx 中: