erselg
use FFI;
public function downloadFile($belgeId) {
$dosya = DB::table('belgeler')
->where('BELGEID', $belgeId)
->first();
if (!$dosya) {
abort(404);
}
$ffi = FFI::cdef("
void* TFlexDecompress(void* compressedData, int compressedSize, int* decompressedSize);
", "path/to/tflex.dll");
$compressedData = hex2bin($dosya->DOSYAGOVDE);
$decompressedSize = FFI::new("int");
$decompressedData = $ffi->TFlexDecompress(
$compressedData,
strlen($compressedData),
FFI::addr($decompressedSize)
);
return Response::make(FFI::string($decompressedData, $decompressedSize->cdata), 200, [
'Content-Type' => 'application/octet-stream',
'Content-Disposition' => 'attachment; filename="' . $dosya->FULLDOSYAADI . '"'
]);
}
Alternatif olarak, TFlex'in .NET uygulaması varsa, .NET Core ile bir microservis yazıp Laravel'den buna istek atabilirsiniz:
public function downloadFile($belgeId) {
$dosya = DB::table('belgeler')
->where('BELGEID', $belgeId)
->first();
$response = Http::post('http://tflex-service/decompress', [
'data' => $dosya->DOSYAGOVDE
]);
if ($response->successful()) {
return Response::make(base64_decode($response->body()), 200, [
'Content-Type' => 'application/octet-stream',
'Content-Disposition' => 'attachment; filename="' . $dosya->FULLDOSYAADI . '"'
]);
}
abort(500, 'Dosya açılamadı');
}