validate([ 'gambar' => 'required|image' ]); $gambar = $request->file('gambar'); $uploadPath = public_path('uploads'); if (!is_dir($uploadPath)) { mkdir($uploadPath, 0755, true); } $namaFile = time() . '.' . $gambar->getClientOriginalExtension(); $gambar->move($uploadPath, $namaFile); $pathGambar = $uploadPath . DIRECTORY_SEPARATOR . $namaFile; try { $response = Http::timeout(60) ->attach('gambar', file_get_contents($pathGambar), $namaFile) ->post('http://127.0.0.1:5000/prediksi'); if (!$response->successful()) { $message = 'Server prediksi gagal: ' . $response->status(); Log::error($message, ['body' => $response->body()]); return back()->with([ 'error' => 'Tidak dapat memproses prediksi. Coba lagi nanti.', ]); } $hasil = $response->json(); return back()->with([ 'success' => 'Prediksi berhasil', 'gambar' => $namaFile, 'hasil' => $hasil['penyakit'] ?? 'Tidak ada hasil', 'confidence' => $hasil['confidence'] ?? 0, ]); } catch (\Exception $e) { Log::error('Prediksi request error: ' . $e->getMessage()); return back()->with([ 'error' => 'Terjadi kesalahan saat menghubungi server prediksi.', ]); } } }