generated from liutk/owl-admin-base
调整分片上传处理
parent
6b8caeedf5
commit
ab4f0e3683
|
|
@ -2,10 +2,10 @@
|
|||
|
||||
namespace App\Traits;
|
||||
|
||||
use Illuminate\Support\Arr;
|
||||
use Illuminate\Support\Facades\Storage;
|
||||
use Illuminate\Support\Str;
|
||||
use Slowlyo\OwlAdmin\Admin;
|
||||
use Illuminate\Support\Arr;
|
||||
use Illuminate\Support\Str;
|
||||
use Illuminate\Support\Facades\Storage;
|
||||
|
||||
trait UploadTrait
|
||||
{
|
||||
|
|
@ -25,17 +25,17 @@ trait UploadTrait
|
|||
public function uploadRich()
|
||||
{
|
||||
$fromWangEditor = false;
|
||||
$file = request()->file('file');
|
||||
$file = request()->file('file');
|
||||
|
||||
if (! $file) {
|
||||
if (!$file) {
|
||||
$fromWangEditor = true;
|
||||
$file = request()->file('wangeditor-uploaded-image');
|
||||
if (! $file) {
|
||||
$file = request()->file('wangeditor-uploaded-image');
|
||||
if (!$file) {
|
||||
$file = request()->file('wangeditor-uploaded-video');
|
||||
}
|
||||
}
|
||||
|
||||
if (! $file) {
|
||||
if (!$file) {
|
||||
return $this->response()->additional(['errno' => 1])->fail(__('admin.upload_file_error'));
|
||||
}
|
||||
|
||||
|
|
@ -57,7 +57,7 @@ trait UploadTrait
|
|||
{
|
||||
$file = request()->file('file');
|
||||
|
||||
if (! $file) {
|
||||
if (!$file) {
|
||||
return $this->response()->fail(__('admin.upload_file_error'));
|
||||
}
|
||||
|
||||
|
|
@ -69,63 +69,71 @@ trait UploadTrait
|
|||
return $this->response()->success(['value' => $path]);
|
||||
}
|
||||
|
||||
public function saveImage($field, $path)
|
||||
public function saveImage($field = 'image', $path)
|
||||
{
|
||||
return $this->saveFile($field, $path);
|
||||
return $this->saveFile($field, $path);
|
||||
}
|
||||
|
||||
/**
|
||||
* 表单提交时,转存实际目录,并保留上传时文件名称;文件保存全路径
|
||||
*/
|
||||
public function saveFile($field, $path)
|
||||
public function saveFile($field = 'file', $path)
|
||||
{
|
||||
$file = request()->file($field);
|
||||
|
||||
if (! $file) {
|
||||
$file = request()->get($field);
|
||||
|
||||
if (!$file) {
|
||||
$file = request()->get($field);
|
||||
}
|
||||
|
||||
$fileArr = [];
|
||||
//判断是否多个文件;
|
||||
if (is_string($file) || isset($file['id'])) {
|
||||
if(is_string($file) || isset($file['id'])){
|
||||
$files = [$file];
|
||||
} else {
|
||||
}else{
|
||||
$files = $file;
|
||||
}
|
||||
|
||||
if ($files) {
|
||||
foreach ($files as $file) {
|
||||
if (is_array($file) && isset($file['state'])) {
|
||||
switch ($file['state']) {
|
||||
if($files){
|
||||
foreach($files as $file){
|
||||
if(is_array($file) && isset($file['state'])){
|
||||
switch($file['state']){
|
||||
case 'init':
|
||||
if (strpos($file['value'], 'temporary') !== false) {
|
||||
if(strpos($file['value'], 'temporary') !== false){
|
||||
$filePath = $path.'/'.$file['name'];
|
||||
Storage::disk(Admin::config('admin.upload.disk'))->move($file['value'], $filePath);
|
||||
$fileArr[] = Storage::disk(Admin::config('admin.upload.disk'))->url($filePath);
|
||||
} else {
|
||||
$res = Storage::disk(Admin::config('admin.upload.disk'))->move($file['value'], $filePath);
|
||||
if($res){
|
||||
$fileArr[] = Storage::disk(Admin::config('admin.upload.disk'))->url($filePath);
|
||||
}else{
|
||||
return response()->fail(__('admin.upload_file_error'));
|
||||
}
|
||||
}else{
|
||||
$fileArr[] = $file['value'];
|
||||
}
|
||||
break;
|
||||
case 'uploaded':
|
||||
if (isset($file['name'])) {
|
||||
if(isset($file['name'])){
|
||||
$filePath = $path.'/'.$file['name'];
|
||||
if (Str::startsWith($file['value'], ['http://', 'https://'])) {
|
||||
if(Str::startsWith($file['value'], ['http://', 'https://'])){
|
||||
$fileUrl = parse_url($file['value']);
|
||||
$fileValue = ltrim($fileUrl['path'], '/');
|
||||
} else {
|
||||
$fileValue = ltrim($fileUrl['path'], '/storage');
|
||||
}else{
|
||||
$fileValue = $file['value'];
|
||||
}
|
||||
Storage::disk(Admin::config('admin.upload.disk'))->move($file['value'], $filePath);
|
||||
$fileArr[] = Storage::disk(Admin::config('admin.upload.disk'))->url($filePath);
|
||||
$res = Storage::disk(Admin::config('admin.upload.disk'))->move($fileValue, $filePath);
|
||||
|
||||
if($res){
|
||||
$fileArr[] = Storage::disk(Admin::config('admin.upload.disk'))->url($filePath);
|
||||
}else{
|
||||
return $this->response()->fail(__('admin.upload_file_error'));
|
||||
}
|
||||
}
|
||||
break;
|
||||
}
|
||||
} else {
|
||||
}else{
|
||||
$fileArr[] = $file;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return $fileArr;
|
||||
}
|
||||
|
||||
|
|
@ -139,8 +147,8 @@ trait UploadTrait
|
|||
$uploadId = md5(time().$fileName);
|
||||
|
||||
//创建临时文件夹
|
||||
if (Storage::disk(Admin::config('admin.upload.disk'))->exists(Admin::config('admin.upload.tem_directory.'.$type).'/'.$uploadId) === false) {
|
||||
if (Storage::disk(Admin::config('admin.upload.disk'))->makeDirectory(Admin::config('admin.upload.tem_directory.'.$type).'/'.$uploadId) === false) {
|
||||
if ( Storage::disk(Admin::config('admin.upload.disk'))->exists(Admin::config('admin.upload.tem_directory.' . $type).'/'.$uploadId) === false ) {
|
||||
if ( Storage::disk(Admin::config('admin.upload.disk'))->makeDirectory(Admin::config('admin.upload.tem_directory.' . $type).'/'.$uploadId) === false ) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
|
@ -159,19 +167,18 @@ trait UploadTrait
|
|||
$uploadId = request()->get('uploadId');
|
||||
$partNumber = request()->get('partNumber');
|
||||
$partSize = request()->get('partSize');
|
||||
// dd($file);
|
||||
$fileName = $file->getClientOriginalName();
|
||||
$fileName = str_replace(' ', '', $fileName);//去掉空格
|
||||
|
||||
//判断该分片是否已存在,
|
||||
$dirPath = Admin::config('admin.upload.tem_directory.'.$type).'/'.$uploadId;
|
||||
if (Storage::disk(Admin::config('admin.upload.disk'))->exists($dirPath.'/'.$fileName.'_'.$partNumber)) {
|
||||
$dirPath = Admin::config('admin.upload.tem_directory.' . $type).'/'.$uploadId;
|
||||
if(Storage::disk(Admin::config('admin.upload.disk'))->exists($dirPath . '/'.$fileName.'_'.$partNumber)){
|
||||
return $this->response()->fail(__('admin.upload_file_error'));
|
||||
} else {
|
||||
}else{
|
||||
//验证分片大小-todo
|
||||
$path = $file->storeAs($dirPath, $fileName.'_'.$partNumber, Admin::config('admin.upload.disk'));
|
||||
$realPath = Storage::disk(Admin::config('admin.upload.disk'))->url($path);
|
||||
$eTag = md5_file($realPath);
|
||||
|
||||
return $this->response()->success(['eTag' => $eTag]);
|
||||
}
|
||||
}
|
||||
|
|
@ -184,32 +191,33 @@ trait UploadTrait
|
|||
$type = 'file';
|
||||
//合并文件
|
||||
$fileName = request()->get('filename', '');
|
||||
$fileName = str_replace(' ', '', $fileName);
|
||||
$uploadId = request()->get('uploadId', '');
|
||||
$partList = request()->get('partList', []);
|
||||
|
||||
$basePath = Admin::config('admin.upload.tem_directory.'.$type).'/'.$uploadId;
|
||||
$basePath = Admin::config('admin.upload.tem_directory.' . $type).'/'.$uploadId;
|
||||
$realPath = 'chunk/'.$fileName;
|
||||
|
||||
//获取分片列表中序号,查看分片是否都完成上传
|
||||
$partNumberList = Arr::pluck($partList, 'partNumber');
|
||||
|
||||
if (max($partNumberList) === count($partNumberList)) {
|
||||
//判断是否已存在同名文件,进行删除
|
||||
if (Storage::disk(Admin::config('admin.upload.disk'))->exists($realPath)) {
|
||||
if(max($partNumberList) === count($partNumberList)){
|
||||
//判断是否已存在同名文件,进行重命名
|
||||
if(Storage::disk(Admin::config('admin.upload.disk'))->exists($realPath)){
|
||||
$realPath = 'chunk/(1)'.$fileName;
|
||||
}
|
||||
for ($i = 1; $i <= count($partNumberList); $i++) {
|
||||
for($i = 1; $i<= count($partNumberList); $i++){
|
||||
$_file = Storage::disk(Admin::config('admin.upload.disk'))->get($basePath.'/'.$fileName.'_'.$i);
|
||||
Storage::disk(Admin::config('admin.upload.disk'))->append($realPath, $_file, null);
|
||||
$res = Storage::disk(Admin::config('admin.upload.disk'))->append($realPath, $_file, null);
|
||||
}
|
||||
//删除分片文件夹
|
||||
Storage::disk(Admin::config('admin.upload.disk'))->deleteDirectory($basePath);
|
||||
|
||||
$value = Storage::disk(Admin::config('admin.upload.disk'))->url($realPath);
|
||||
|
||||
return $this->response()->success(['value' => $value]);
|
||||
} else {
|
||||
return $this->response()->success(['value'=>$value]);
|
||||
}else{
|
||||
return $this->response()->fail(__('admin.upload_file_error'));
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
Loading…
Reference in New Issue