上传文件后,保存的文件不正确。
上传的是图片文件,得到的下面截图的内容
<?php
namespace app\api\controller;
use support\Request;
use Tinywan\ExceptionHandler\Exception\ServerErrorHttpException;
use Tinywan\Jwt\JwtToken;
use Tinywan\Storage\Storage; //这里用到https://www.workerman.net/plugin/21 @Tinywan
class UploadController
{
//照着官方文档的示例写的 https://www.workerman.net/doc/webman/request.html#%E8%8E%B7%E5%8F%96%E4%B8%8A%E4%BC%A0%E6%96%87%E4%BB%B6
public function file(Request $request)
{
$uid = JwtToken::getCurrentId();
$files = $request->file();
$result = [];
foreach ($files as $file) {
if ($file && $file->isValid()) {
var_export($file->getUploadExtension()); //输出''
echo PHP_EOL;
var_export($file->getUploadMimeType()); //输出 'application/json'
echo PHP_EOL;
var_export($file->getUploadErrorCode()); //输出 0
echo PHP_EOL;
var_export($file->getUploadName()); //输出 'file-1685872373882'
echo PHP_EOL;
var_export($file->getSize()); //输出 34
echo PHP_EOL;
var_export($file->getPath()); //输出 '/tmp'
echo PHP_EOL;
var_export($file->getRealPath()); //输出 '/tmp/workerman.upload.EEdPEm'
echo PHP_EOL;
$filePath = '/uploads/' . $uid . '/' . $file->getUploadName();
$file->move(public_path() . $filePath);
array_push($result, ['url' => $this->getFullUrl($filePath)]);
} else {
throw new ServerErrorHttpException('未找到上传的文件');
}
}
return response_json($result);
}
// 用的Tinywan的上传组件
public function img(Request $request)
{
Storage::config();
$res = Storage::uploadFile();
return response_json($res);
}
public function getFullUrl($file = '')
{
$request = request();
return $request->url() . $file;
}
}
config/plugin/tinywan/storage/app.php 本地上传的配置如下
<?php
return [
'enable' => true,
'storage' => [
'default' => 'local', // local:本地 oss:阿里云 cos:腾讯云 qos:七牛云
'single_limit' => 1024 * 1024 * 200, // 单个文件的大小限制,默认200M 1024 * 1024 * 200
'total_limit' => 1024 * 1024 * 200, // 所有文件的大小限制,默认200M 1024 * 1024 * 200
'nums' => 10, // 文件数量限制,默认10
'include' => [], // 被允许的文件类型列表
'exclude' => [], // 不被允许的文件类型列表
// 本地对象存储
'local' => [
'adapter' => \Tinywan\Storage\Adapter\LocalAdapter::class,
'root' => public_path().'/uploads/',
'dirname' => function () {
return date('Ymd');
},
'domain' => 'http://192.168.1.78:8788/',
'uri' => 'uploads/', // 如果 domain + uri 不在 public 目录下,请做好软链接,否则生成的url无法访问
'algo' => 'sha1',
],
//......省略其他配置.....
]
]
前后端分离,前端用的uviewui的上传文件请求。
Webman-framework v1.5.5
Alpine Linux 3.16.0
Workerman version:4.1.9
PHP version:8.1.7
Event-Loop:\Workerman\Events\Select
写了一个普通的表单上传,正常
这样上传成功了
AJAX方式上传好像Content-Type判断有问题
这是本地上传时就提交了错误的数据?
是前端少传了参数,导致的上述问题。
已解决,前端代码少指定了上传文件,导致的