migrasi upload file ke s3 amazon
This commit is contained in:
@@ -109,6 +109,7 @@ class ClaimRequestController extends Controller
|
||||
'name' => $new_file_name,
|
||||
'original_name' => $full_path,
|
||||
'extension' => $ekstension,
|
||||
'source' => env('FILESYSTEM_DISK'),
|
||||
'path' => $pathFile,
|
||||
'created_by' => auth()->user()->id,
|
||||
'updated_by' => auth()->user()->id,
|
||||
@@ -134,6 +135,7 @@ class ClaimRequestController extends Controller
|
||||
'name' => $new_file_name,
|
||||
'original_name' => $full_path,
|
||||
'extension' => $ekstension,
|
||||
'source' => env('FILESYSTEM_DISK'),
|
||||
'path' => $pathFile,
|
||||
'created_by' => auth()->user()->id,
|
||||
'updated_by' => auth()->user()->id,
|
||||
@@ -159,6 +161,7 @@ class ClaimRequestController extends Controller
|
||||
'name' => $new_file_name,
|
||||
'original_name' => $full_path,
|
||||
'extension' => $ekstension,
|
||||
'source' => env('FILESYSTEM_DISK'),
|
||||
'path' => $pathFile,
|
||||
'created_by' => auth()->user()->id,
|
||||
'updated_by' => auth()->user()->id,
|
||||
|
||||
@@ -70,6 +70,7 @@ class CorporateCurrentController extends Controller
|
||||
'type' => 'avatar',
|
||||
'name' => File::getFileName('avatar', $corporate->id, $request->file('logo')),
|
||||
'extension' => $request->file('logo')->getClientOriginalExtension(),
|
||||
'source' => env('FILESYSTEM_DISK'),
|
||||
'path' => $pathFileAvatar,
|
||||
'created_by' => auth()->user()->id,
|
||||
'updated_by' => auth()->user()->id,
|
||||
|
||||
@@ -162,6 +162,7 @@ class ClaimRequestController extends Controller
|
||||
'name' => $new_file_name,
|
||||
'original_name' => $full_path,
|
||||
'extension' => $ekstension,
|
||||
'source' => env('FILESYSTEM_DISK'),
|
||||
'path' => $pathFile,
|
||||
'created_by' => auth()->user()->id,
|
||||
'updated_by' => auth()->user()->id,
|
||||
@@ -187,6 +188,7 @@ class ClaimRequestController extends Controller
|
||||
'name' => $new_file_name,
|
||||
'original_name' => $full_path,
|
||||
'extension' => $ekstension,
|
||||
'source' => env('FILESYSTEM_DISK'),
|
||||
'path' => $pathFile,
|
||||
'created_by' => auth()->user()->id,
|
||||
'updated_by' => auth()->user()->id,
|
||||
@@ -212,6 +214,7 @@ class ClaimRequestController extends Controller
|
||||
'name' => $new_file_name,
|
||||
'original_name' => $full_path,
|
||||
'extension' => $ekstension,
|
||||
'source' => env('FILESYSTEM_DISK'),
|
||||
'path' => $pathFile,
|
||||
'created_by' => auth()->user()->id,
|
||||
'updated_by' => auth()->user()->id,
|
||||
@@ -303,6 +306,7 @@ class ClaimRequestController extends Controller
|
||||
'name' => File::getFileName('claim-result', $id, $file),
|
||||
'original_name' => $file->getClientOriginalName(),
|
||||
'extension' => $file->getClientOriginalExtension(),
|
||||
'source' => env('FILESYSTEM_DISK'),
|
||||
'path' => $pathFile,
|
||||
'created_by' => auth()->user()->id,
|
||||
'updated_by' => auth()->user()->id,
|
||||
@@ -318,6 +322,7 @@ class ClaimRequestController extends Controller
|
||||
'name' => File::getFileName('claim-diagnosis', $id, $file),
|
||||
'original_name' => $file->getClientOriginalName(),
|
||||
'extension' => $file->getClientOriginalExtension(),
|
||||
'source' => env('FILESYSTEM_DISK'),
|
||||
'path' => $pathFile,
|
||||
'created_by' => auth()->user()->id,
|
||||
'updated_by' => auth()->user()->id,
|
||||
@@ -333,6 +338,7 @@ class ClaimRequestController extends Controller
|
||||
'name' => File::getFileName('claim-kondisi', $id, $file),
|
||||
'original_name' => $file->getClientOriginalName(),
|
||||
'extension' => $file->getClientOriginalExtension(),
|
||||
'source' => env('FILESYSTEM_DISK'),
|
||||
'path' => $pathFile,
|
||||
'created_by' => auth()->user()->id,
|
||||
'updated_by' => auth()->user()->id,
|
||||
|
||||
@@ -239,6 +239,7 @@ class CorporateController extends Controller
|
||||
'type' => 'avatar',
|
||||
'name' => File::getFileName('avatar', $newCorporate->id, $request->file('logo')),
|
||||
'extension' => $request->file('logo')->getClientOriginalExtension(),
|
||||
'source' => env('FILESYSTEM_DISK'),
|
||||
'path' => $pathFileAvatar,
|
||||
'created_by' => auth()->user()->id,
|
||||
'updated_by' => auth()->user()->id,
|
||||
@@ -353,6 +354,7 @@ class CorporateController extends Controller
|
||||
'type' => 'avatar',
|
||||
'name' => File::getFileName('avatar', $corporate->id, $request->file('logo')),
|
||||
'extension' => $request->file('logo')->getClientOriginalExtension(),
|
||||
'source' => env('FILESYSTEM_DISK'),
|
||||
'path' => $pathFileAvatar,
|
||||
'created_by' => auth()->user()->id,
|
||||
'updated_by' => auth()->user()->id,
|
||||
|
||||
@@ -542,6 +542,7 @@ class RequestLogController extends Controller
|
||||
'name' => File::getFileName('final-log-result', $id, $file),
|
||||
'original_name' => $file->getClientOriginalName(),
|
||||
'extension' => $file->getClientOriginalExtension(),
|
||||
'source' => env('FILESYSTEM_DISK'),
|
||||
'path' => $pathFile,
|
||||
'created_by' => auth()->user()->id,
|
||||
'updated_by' => auth()->user()->id,
|
||||
@@ -558,6 +559,7 @@ class RequestLogController extends Controller
|
||||
'name' => File::getFileName('final-log-diagnosis', $id, $file),
|
||||
'original_name' => $file->getClientOriginalName(),
|
||||
'extension' => $file->getClientOriginalExtension(),
|
||||
'source' => env('FILESYSTEM_DISK'),
|
||||
'path' => $pathFile,
|
||||
'created_by' => auth()->user()->id,
|
||||
'updated_by' => auth()->user()->id,
|
||||
@@ -573,6 +575,7 @@ class RequestLogController extends Controller
|
||||
'name' => File::getFileName('final-log-kondisi', $id, $file),
|
||||
'original_name' => $file->getClientOriginalName(),
|
||||
'extension' => $file->getClientOriginalExtension(),
|
||||
'source' => env('FILESYSTEM_DISK'),
|
||||
'path' => $pathFile,
|
||||
'created_by' => auth()->user()->id,
|
||||
'updated_by' => auth()->user()->id,
|
||||
@@ -1150,13 +1153,14 @@ class RequestLogController extends Controller
|
||||
$requestLog = RequestLog::findOrFail($id);
|
||||
if ($request->hasFile('result_files')) {
|
||||
foreach ($request->result_files as $file) {
|
||||
$pathFile = File::storeFile('final-log-result', $id, $file);
|
||||
$fileData = File::storeFile('final-log-result', $id, $file);
|
||||
$requestLog->files()->updateOrCreate([
|
||||
'type' => 'final-log-result',
|
||||
'name' => File::getFileName('final-log-result', $id, $file),
|
||||
'name' => $fileData['name'],
|
||||
'original_name' => $file->getClientOriginalName(),
|
||||
'extension' => $file->getClientOriginalExtension(),
|
||||
'path' => $pathFile,
|
||||
'source' => env('FILESYSTEM_DISK'),
|
||||
'path' => $fileData['path'],
|
||||
'created_by' => auth()->user()->id,
|
||||
'updated_by' => auth()->user()->id,
|
||||
'reason' => $request->reason,
|
||||
@@ -1166,13 +1170,14 @@ class RequestLogController extends Controller
|
||||
|
||||
if ($request->hasFile('diagnosa_files')) {
|
||||
foreach ($request->diagnosa_files as $file) {
|
||||
$pathFile = File::storeFile('final-log-diagnosis', $id, $file);
|
||||
$fileData = File::storeFile('final-log-diagnosis', $id, $file);
|
||||
$requestLog->files()->updateOrCreate([
|
||||
'type' => 'final-log-diagnosis',
|
||||
'name' => File::getFileName('final-log-diagnosis', $id, $file),
|
||||
'type' => 'final-log-result',
|
||||
'name' => $fileData['name'],
|
||||
'original_name' => $file->getClientOriginalName(),
|
||||
'extension' => $file->getClientOriginalExtension(),
|
||||
'path' => $pathFile,
|
||||
'source' => env('FILESYSTEM_DISK'),
|
||||
'path' => $fileData['path'],
|
||||
'created_by' => auth()->user()->id,
|
||||
'updated_by' => auth()->user()->id,
|
||||
'reason' => $request->reason,
|
||||
@@ -1182,13 +1187,14 @@ class RequestLogController extends Controller
|
||||
|
||||
if ($request->hasFile('kondisi_files')) {
|
||||
foreach ($request->kondisi_files as $file) {
|
||||
$pathFile = File::storeFile('final-log-kondisi', $id, $file);
|
||||
$fileData = File::storeFile('final-log-kondisi', $id, $file);
|
||||
$requestLog->files()->updateOrCreate([
|
||||
'type' => 'final-log-kondisi',
|
||||
'name' => File::getFileName('final-log-kondisi', $id, $file),
|
||||
'type' => 'final-log-result',
|
||||
'name' => $fileData['name'],
|
||||
'original_name' => $file->getClientOriginalName(),
|
||||
'extension' => $file->getClientOriginalExtension(),
|
||||
'path' => $pathFile,
|
||||
'source' => env('FILESYSTEM_DISK'),
|
||||
'path' => $fileData['path'],
|
||||
'created_by' => auth()->user()->id,
|
||||
'updated_by' => auth()->user()->id,
|
||||
'reason' => $request->reason,
|
||||
@@ -1199,29 +1205,96 @@ class RequestLogController extends Controller
|
||||
return Helper::responseJson(data: $request->toArray(), message: 'File Success Uploaded');
|
||||
}
|
||||
|
||||
// public function requestFiles(Request $request, $id)
|
||||
// {
|
||||
// Helper::setCustomPHPIniSettings();
|
||||
// $requestLog = RequestLog::findOrFail($id);
|
||||
|
||||
// // Daftar file yang akan diproses
|
||||
// $fileTypes = [
|
||||
// 'result_files' => 'final-log-result',
|
||||
// 'diagnosa_files' => 'final-log-diagnosis',
|
||||
// 'kondisi_files' => 'final-log-kondisi',
|
||||
// ];
|
||||
|
||||
// foreach ($fileTypes as $inputName => $fileType) {
|
||||
// if ($request->hasFile($inputName)) {
|
||||
// foreach ($request->file($inputName) as $file) {
|
||||
// // 1. Panggil method storeFile yang sudah diperbaiki
|
||||
// $fileData = File::storeFile($fileType, $id, $file);
|
||||
// dd($fileData);
|
||||
// // 2. Perbaiki panggilan updateOrCreate
|
||||
// $requestLog->files()->updateOrCreate(
|
||||
// [
|
||||
// 'original_name' => $file->getClientOriginalName(),
|
||||
// ],
|
||||
// [
|
||||
// // Array 2: Data untuk di-update atau di-create
|
||||
// 'name' => $fileData['name'],
|
||||
// 'original_name' => $file->getClientOriginalName(),
|
||||
// 'extension' => $file->getClientOriginalExtension(),
|
||||
// 'source' => 's3', // Langsung set ke 's3' untuk file baru
|
||||
// 'path' => $fileData['path'],
|
||||
// 'created_by' => auth()->id(),
|
||||
// 'updated_by' => auth()->id(),
|
||||
// 'reason' => $request->reason,
|
||||
// ]
|
||||
// );
|
||||
// }
|
||||
// }
|
||||
// }
|
||||
|
||||
// return Helper::responseJson(data: $requestLog->files, message: 'File Success Uploaded');
|
||||
// }
|
||||
|
||||
public function deleteFiles(Request $request, $id)
|
||||
{
|
||||
// Path file yang akan dihapus
|
||||
$path = 'public/' . $request->path;
|
||||
// Ambil data file dari database
|
||||
$file = File::where('path', $request->path)->first();
|
||||
|
||||
// Tentukan disk berdasarkan source
|
||||
$disk = $file->source === 's3' ? 's3' : 'local';
|
||||
|
||||
// Menghapus file dari penyimpanan
|
||||
if (Storage::exists($path)) {
|
||||
Storage::delete($path);
|
||||
// Path file sesuai yang disimpan di DB
|
||||
$path = $file->path;
|
||||
|
||||
// Update entri file dari basis data
|
||||
File::where('path', $request->path)->update([
|
||||
'deleted_at' => Carbon::now(), // Gunakan Carbon untuk mendapatkan tanggal dan waktu saat ini
|
||||
'deleted_by' => auth()->user()->id,
|
||||
'reason' => $request->reason
|
||||
// Hapus file dari storage (cek dulu ada atau tidak)
|
||||
if (Storage::disk($disk)->exists($path)) {
|
||||
Storage::disk($disk)->delete($path);
|
||||
|
||||
// Update status file di DB (soft delete + reason)
|
||||
$file->update([
|
||||
'deleted_at' => Carbon::now(),
|
||||
'deleted_by' => auth()->id(),
|
||||
'reason' => $request->reason,
|
||||
]);
|
||||
// Mengembalikan respons JSON sukses
|
||||
return Helper::responseJson(data: $request->toArray(), message: 'File successfully deleted');
|
||||
|
||||
return Helper::responseJson(
|
||||
data: $file->toArray(),
|
||||
message: 'File successfully deleted'
|
||||
);
|
||||
} else {
|
||||
// Update status file di DB (soft delete + reason)
|
||||
$file->update([
|
||||
'deleted_at' => Carbon::now(),
|
||||
'deleted_by' => auth()->id(),
|
||||
'reason' => $request->reason,
|
||||
]);
|
||||
|
||||
return Helper::responseJson(
|
||||
data: $file->toArray(),
|
||||
message: 'File successfully deleted'
|
||||
);
|
||||
}
|
||||
|
||||
// Jika file tidak ditemukan di penyimpanan, kirim respons JSON gagal
|
||||
return Helper::responseJson(data: $request->toArray(), message: 'File deletion failed');
|
||||
// Jika file tidak ditemukan
|
||||
return Helper::responseJson(
|
||||
data: $file->toArray(),
|
||||
message: 'File deletion failed'
|
||||
);
|
||||
}
|
||||
|
||||
|
||||
public function cekphp(){
|
||||
phpinfo();
|
||||
}
|
||||
|
||||
@@ -129,6 +129,7 @@ class PersonController extends Controller
|
||||
'type' => 'avatar',
|
||||
'name' => File::getFileName('avatar', $family->id, $request->file('user_avatar')),
|
||||
'extension' => $request->file('user_avatar')->getClientOriginalExtension(),
|
||||
'source' => env('FILESYSTEM_DISK'),
|
||||
'path' => $pathFileAvatar,
|
||||
'created_by' => auth()->user()->id,
|
||||
'updated_by' => auth()->user()->id,
|
||||
@@ -141,6 +142,7 @@ class PersonController extends Controller
|
||||
'type' => 'dataDiri',
|
||||
'name' => File::getFileName('dataDiri', $family->id, $request->file('verification_file')),
|
||||
'extension' => $request->file('verification_file')->getClientOriginalExtension(),
|
||||
'source' => env('FILESYSTEM_DISK'),
|
||||
'path' => $pathFileVerification,
|
||||
'created_by' => auth()->user()->id,
|
||||
'updated_by' => auth()->user()->id,
|
||||
|
||||
@@ -18,16 +18,18 @@ class File extends Model
|
||||
'name',
|
||||
'original_name',
|
||||
'extension',
|
||||
'source',
|
||||
'path',
|
||||
'created_by',
|
||||
'updated_by',
|
||||
'deleted_at',
|
||||
'reason'
|
||||
];
|
||||
|
||||
protected $hidden = [
|
||||
'created_at',
|
||||
'updated_at',
|
||||
'deleted_at',
|
||||
// 'deleted_at',
|
||||
'created_by',
|
||||
'updated_by',
|
||||
'deleted_by',
|
||||
@@ -78,20 +80,64 @@ class File extends Model
|
||||
|
||||
public function getUrlAttribute()
|
||||
{
|
||||
return url(Storage::url($this->path));
|
||||
// Jika path kosong, kembalikan null
|
||||
if (!$this->path) {
|
||||
return null;
|
||||
}
|
||||
|
||||
// Cek nilai 'source'. Jika 's3', gunakan disk S3.
|
||||
// Selain itu (termasuk null atau 'local'), gunakan disk 'public'.
|
||||
if ($this->source === 's3') {
|
||||
try {
|
||||
return Storage::disk('s3')->temporaryUrl(
|
||||
$this->path,
|
||||
now()->addMinutes(60) // expired 1 jam
|
||||
);
|
||||
} catch (\Exception $e) {
|
||||
return Storage::disk('s3')->url($this->path); // fallback kalau public
|
||||
}
|
||||
}
|
||||
return Storage::disk('public')->url($this->path);
|
||||
}
|
||||
|
||||
// public static function storeFile($type, $id, $file)
|
||||
// {
|
||||
// // $fileName = self::getFileName($type, $id);
|
||||
// $fileName = $file->getClientOriginalName();
|
||||
// $directory = self::getDirectory($type);
|
||||
// $extension = $file->getClientOriginalExtension();
|
||||
// $path = $directory . $fileName . '.' . $extension;
|
||||
// $file->storeAs('public/' . $directory, $fileName);
|
||||
// return $path;
|
||||
// }
|
||||
|
||||
public static function storeFile($type, $id, $file)
|
||||
{
|
||||
// $fileName = self::getFileName($type, $id);
|
||||
$fileName = $file->getClientOriginalName();
|
||||
$directory = self::getDirectory($type);
|
||||
// Pastikan directory tidak punya trailing slash
|
||||
$directory = rtrim(self::getDirectory($type), '/');
|
||||
|
||||
// Buat nama file yang unik dan aman
|
||||
$originalName = pathinfo($file->getClientOriginalName(), PATHINFO_FILENAME);
|
||||
$extension = $file->getClientOriginalExtension();
|
||||
$path = $directory . $fileName . '.' . $extension;
|
||||
$file->storeAs('public/' . $directory, $fileName . '.' . $extension);
|
||||
return $path;
|
||||
$safeName = Str::slug($originalName);
|
||||
$uniqueName = $safeName . '-' . uniqid() . '.' . $extension;
|
||||
|
||||
// Upload file ke disk 's3' dengan visibility 'public'
|
||||
$path = Storage::disk('s3')->putFileAs(
|
||||
$directory,
|
||||
$file,
|
||||
$uniqueName,
|
||||
'public'
|
||||
);
|
||||
|
||||
// Kembalikan path dan nama unik agar bisa digunakan di controller
|
||||
return [
|
||||
'path' => $directory . '/' . $uniqueName, // hasil konsisten
|
||||
'name' => $uniqueName,
|
||||
];
|
||||
}
|
||||
|
||||
|
||||
public static function storeFileChat($type, $id, $file)
|
||||
{
|
||||
// $fileName = self::getFileName($type, $id);
|
||||
|
||||
@@ -48,7 +48,7 @@ return [
|
||||
'driver' => 's3',
|
||||
'key' => env('AWS_ACCESS_KEY_ID'),
|
||||
'secret' => env('AWS_SECRET_ACCESS_KEY'),
|
||||
'region' => env('AWS_DEFAULT_REGION'),
|
||||
'region' => env('AWS_DEFAULT_REGION', 'ap-southeast-1'),
|
||||
'bucket' => env('AWS_BUCKET'),
|
||||
'url' => env('AWS_URL'),
|
||||
'endpoint' => env('AWS_ENDPOINT'),
|
||||
|
||||
Reference in New Issue
Block a user