上傳文件后,保存的文件不正確。
上傳的是圖片文件,得到的下面截圖的內(nèi)容
<?php
namespace app\api\controller;
use support\Request;
use Tinywan\ExceptionHandler\Exception\ServerErrorHttpException;
use Tinywan\Jwt\JwtToken;
use Tinywan\Storage\Storage; //這里用到http://wtbis.cn/plugin/21 @Tinywan
class UploadController
{
//照著官方文檔的示例寫的 http://wtbis.cn/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, // 單個(gè)文件的大小限制,默認(rèn)200M 1024 * 1024 * 200
'total_limit' => 1024 * 1024 * 200, // 所有文件的大小限制,默認(rèn)200M 1024 * 1024 * 200
'nums' => 10, // 文件數(shù)量限制,默認(rèn)10
'include' => [], // 被允許的文件類型列表
'exclude' => [], // 不被允許的文件類型列表
// 本地對(duì)象存儲(chǔ)
'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 目錄下,請(qǐng)做好軟鏈接,否則生成的url無法訪問
'algo' => 'sha1',
],
//......省略其他配置.....
]
]
前后端分離,前端用的uviewui的上傳文件請(qǐng)求。
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
寫了一個(gè)普通的表單上傳,正常
<form action="/api/upload/file" method="post" enctype="multipart/form-data">
<input type="file" name="file" />
<input type="submit" value="Upload" />
</form>
這樣上傳成功了
AJAX方式上傳好像Content-Type判斷有問題