Laravel Türkiye Discord Kanalı Forumda kod paylaşılırken dikkat edilmesi gerekenler!Birlikte proje geliştirmek ister misiniz?
  • Eerselg

      Seviye 4

    Merhabalar;
    Dosya ekeleyemediğim için sqlde bir satırı buraya ekleyeceğim.

    BELGEID FIRMAID DOSYA ACIKLAMA TARIH USERID DOSYAFORMATI BELGETIPI ILKKAYITTARIHI DOSYAGOVDE EKLEMETURU GORUSMEID BELGEISLEM FULLDOSYAADI
    159 36393 tara0003.tif NULL 2008-12-20 11:11:07.887 17 7 0 2008-12-20 11:11:07.887 F8F3DC7B29F788E7D103CC7DEFD8F9E636FFFE7CFB1B77EF539F6E6FFF41C7BFDFF798EBD963CC74E77F7D8AB77F6D8CBBF7F8FBDF487F7D8D1BFBAC79EBFBFC7F6BFB8C7F67E7E8F65FFD51EFBE0E11E7BF77FDD636FBFBFC7DEFA748FBDE979ECF5DFE5B1D7BEC763A7FFACC75EFDE31E7BF94F79ECA5BEC78EFE138F3DFFD73CB63FF4D8DEDFF258F6F73CF641E6BF7592D8CE1B68BC6B78CFAE6E14B5C4318CB07BF4AF8ACFA663EFF79EADB427CB15711B3695FC562AE4FE7BCCB641DF3D4356FFFDC5B5AFE808B4BFB56B8D73959433A67FFF2579C1B6293F0CD8DCCF91F7021F812C67C199C32C665CC035732C826C03627F4B1417664B6F7D42FF9E70F63F92B5E143E57E163A8753047E1638C1D75022E439E3191620D5EC63A1163FD07283AC42865A6F5D7DD13787DF15DF003B10CCB30E1C56E0433E53C34718CFD95D4CDA87829A2C6B1DC17DC21730062E1152B9F010AD27A0A5D33E1494E39B1A9F6A32F0552E8104122D35C87953C287D311D3AD511FCABC1A1F87FAC2FB24B759F8005BA57D6EC4A0CE8C5EE796F89089587CC0A314145303D411894D90FAD0D047EA237CD8A62A6D9C34B7F5F8F2161731A6BE18A028516C1A2FB5EA61876A2E1DC397A1396B0BD597371948C277B732DE44E1C30FFE57691F1A18143E6A3298C017F1025F8234E09CDD85651D9CB20EAAFBB2E80EE1D3C64B839C18A15A05DFD6641D78D341F85EA02A3FF01D10BE3FF519724F4AD79AF878468D539C78A2C9A0529FAB735ED9897CA8AFB355392F54E7218943331EE1630A9F2AFA52AE0A1D1243B8246F716161818F632B91CA8BCD7474E8E330B59196E7ECD00C7ECE57C4E510CF98F021E540DD770C1F5E0451F64BB785E354AD83DE81A89C573558113E5154DA6450E1DB22E355F8F052684C7D48FB34BE527D1C4A732297E4888602AC91D0325EC32740591506B7051F5E6924A43E94EE802FAE196F8ECF2F8D37F481CFCDF1E9E652C257B6B8A0B8ADF14192DB820F7251EA43C341E401DF31E4136859A11A06E31DC35734D6E7F8D060452F2F498EF4E2A3C287D57376179AF6A14B414CEA53F884B2CA717C2AEDF3F4AB22149B39E16145CBDF38BEEDC93A54CE0B7CCA781BEAA342302F8D37C7A70A3379DAD768AC87FA28875139AFAACD9DAFFC2EA6D88CE65294FB506CA106ABBAF182009AEBA3025FDEDEE7E12E29E7D52F88D0E5A07A55D4C07711EA3BDFC7A5AEA604A6F0B9C09728E345CE8A3C81F0A1B4027C0247A2C940AB2FEF6580A3297CE085E59B3619519B35C222DDDB9AAC83EC93F0214FF5808FE25FE243B68C621E5675B94FF571410907410EF2B42FCC5F93ABAC83F0611FF5F838C169CED95D8CF122AE3EE14BB4FA9AF83C64CB253EA0422E8B6E2F08320BDFD116E143D55537D6A3058F8C77029F9BE353ED7DAA8715E129F051CD974EA1D4870E08DBA83E49EA4B3BC08777E375E385E5AA9E4275E3450B430D1F7089717CDBA43EC4DFD1F818E1D3EA53E53E641D11A7BCA048FB4265BCC82D143EEC8343C19A1AEB73F5A10603FF36A57DA9B3834601E9A07E8BBECD501FAA1081CA799181D6F0418539BE50E1CB3B69C880BA22E4F8809AF06D93FA4842D3DCA7D5C6F7C9FB1932DF87919BBC21BF0A7C5F3FC9735E99F8393E57E5CE54CDDB26F5559436DD772105974D8756DDBFC557B158C167F1AD00AD0A62F1552C56F0597C2B40AB82587C158B157C16DF0AD0AA20165FC562059FC5B702B42AC885BC2AAA2EBFE93E8BCFE8095A7C169F1101A3C0567D169F1101A3C0567D86F88C826F7B60AB3E2305D85A87C56744C028B0355E8BCF88805160AB3E8BCF888051609BF31AE21346E1B73CB0559F91002C3E437CC228FC9607B6EA3312802DF719E2330ABEED81ADFA8C1460F1597C46048C025BF5597C46048C025BF5597C46048C025BF519E2330ABEED81ADFA8C1460F1597C46048C025BF5597C46048C025BF5597C46048C025BF5597C46048C025BF5597C46048C025BF5597C46048C025BF5597C46048C025BF5597C46048C025BF5597C46048C025BF5597C46048C025BF519E2330ABEED816DE75C230558E3B5F88C081805B6EAB3F88C081805B6EAB3F88C081805B6EAB3F88C081805B6EAB3F88C081805B6EAB3F88C081805B64D0686F88451F82D0F6CD56724009B75587C46048C025BF519E2330ABEED816DD661A4006BBC169F1101A3C0567D169F1101A3C0567D169F1101A3C0567D169F1101A3C0567D169F1101A3C0567D86F88C826F7B60DB6460A4006BBC86F88C826F7B60AB3E2305587C169F1101A3C0567D86F88C826F7B60AB3E2305587C169F1101A3C0567D169F1101A3C0567D169F1101A3C0567D169F1101A3C0567D169F1101A3C0567D169F1101A3C0F65591C56744C028B04DFB2C3E23024681ADFA2C3E23024681ADFA2C3E23024681ADFA2C3E23024681ADFA2C3E23024681ADFA2C3E23024681ADFA2C3E23024681ADFA2C3E23024681ADFA2C3E23024681ADFA2C3E23024681ADFA2C3E23024681ADFA2C3E23024681ADFA2C3E23024681ADFA2C3E23024681ADFA2C3E23024681ADFA2C3E23024681ADFA0CF11905DFF6C0B66FB39102ACF15A7C46048C025BF5597C46048C025BF5597C46048C025BF5597C46048C025BF5597C46048C025BF5597C46048C025BF5597C46048C025BF5597C46048C025BF5597C46048C025BF5597C46048C025BF5597C46048C025BF5597C46048C02DBD7E486F88451F82D0F6CD33E2301587C169F1101A3C0567D169F1101A3C0567D169F1101A3C0567D169F1101A3C0567D169F1101A3C0567D169F1101A3C0567D169F1101A3C0567D169F1101A3C0567D169F1101A3C0567D169F1101A3C0567D169F1101A3C0567D169F1101A3C0567D169F1101A3C0B68B90213E61147ECB032F90F6056C3177233F6C6FE7CEF5DB9FBA5F79F4EEC7F263293FFFFE7BEF7E26E5C7FF6D4C0FEA13CD3BBB22 1 0 2 C:\Documents and Settings\gulerd\Desktop\İL ÖZEL İDARESİ SAKARYA TEKLİFLER\tara0003.tif

    sqlde veritabanında bu şekilde tutulan bir döküman var .fcf ile formatlanıp kaydedilmiş. Bu dosyayı laravelde nasıl indirme işlemi yapabiliriz ?

    • koti42

        Seviye 246
      use Illuminate\Support\Facades\Response;
      
      public function downloadFile($belgeId)
      {
          $dosya = DB::table('belgeler')
              ->where('BELGEID', $belgeId)
              ->first();
      
          if (!$dosya) {
              abort(404);
          }
      
          $dosyaIcerik = hex2bin($dosya->DOSYAGOVDE);
      
          $dosyaAdi = $dosya->FULLDOSYAADI ?? 'dokuman.' . strtolower($dosya->DOSYAFORMATI);
      
          return Response::make($dosyaIcerik, 200, [
              'Content-Type' => 'application/octet-stream',
              'Content-Disposition' => 'attachment; filename="' . $dosyaAdi . '"',
              'Content-Length' => strlen($dosyaIcerik)
          ]);
      }

      Sizin verdiğiniz şekilde denedim fakat dosya içeriği hatalı geliyor Bugün öğrendiğim kadarıyla TFlexCompress ile sıkıştırılmış dosyalarmış. Laravelde tam karşılığını aradım ancak bulamadım. Özel kütüphane vs var ise paylaşabilirmisiniz?

        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ı');
        }