@@ -581,111 +581,56 @@ export default function ServerDetailsPage() {
581581 const files = event . target . files ;
582582 if ( ! files || ! accessKey ) return ;
583583
584- try {
585- setUploadProgress ( 0 ) ;
586- setFilesError ( null ) ; // Clear any previous errors
587-
588- // Get upload URL
589- const urlResult = await getUploadUrl ( identifier , accessKey , currentPath ) ;
590- if ( ! urlResult . success || ! urlResult . data ) {
591- throw new Error ( typeof urlResult . error === 'string' ? urlResult . error : "Erro ao obter URL de upload" ) ;
584+ // Checagem de tamanho de arquivo (100MB = 104857600 bytes)
585+ for ( let i = 0 ; i < files . length ; i ++ ) {
586+ if ( files [ i ] . size > 104857600 ) {
587+ setFilesError ( `O arquivo "${ files [ i ] . name } " excede o limite de 100MB.` ) ;
588+ return ;
592589 }
590+ }
593591
594- // Upload each file individually with proper progress tracking
595- for ( let i = 0 ; i < files . length ; i ++ ) {
596- const file = files [ i ] ;
597- console . log ( `Starting upload for ${ file . name } (${ i + 1 } /${ files . length } )` ) ;
598-
599- // Update progress to show current file
600- const baseProgress = ( i / files . length ) * 100 ;
601- setUploadProgress ( baseProgress ) ;
592+ try {
593+ setUploadProgress ( 0 ) ;
594+ setFilesError ( null ) ;
595+
596+ // Monta o FormData para múltiplos arquivos
597+ const formData = new FormData ( ) ;
598+ formData . append ( 'server_identifier' , identifier ) ;
599+ formData . append ( 'directory' , currentPath || '/' ) ;
600+ for ( let i = 0 ; i < files . length ; i ++ ) {
601+ formData . append ( 'files[]' , files [ i ] ) ;
602+ }
602603
603- try {
604- const formData = new FormData ( ) ;
605- formData . append ( 'files' , file ) ;
606-
607- const response = await fetch ( urlResult . data . url , {
608- method : 'POST' ,
609- mode : 'cors' ,
610- credentials : 'omit' ,
611- body : formData ,
612- } ) ;
613604
614- if ( response . ok ) {
615- console . log ( `✅ Upload successful for ${ file . name } ` ) ;
616- // Update progress to completion for this file
617- setUploadProgress ( ( ( i + 1 ) / files . length ) * 100 ) ;
618- } else {
619- // Handle HTTP errors
620- let httpErrorMessage = `Erro HTTP ${ response . status } ao fazer upload de ${ file . name } ` ;
621- try {
622- const errorData = await response . json ( ) ;
623- httpErrorMessage = typeof errorData . message === 'string' ? errorData . message : httpErrorMessage ;
624- } catch {
625- httpErrorMessage = `HTTP ${ response . status } : ${ response . statusText } ` ;
626- }
627- throw new Error ( httpErrorMessage ) ;
628- }
605+ // Usa a URL da API do .env
606+ const apiUrl = process . env . NEXT_PUBLIC_API_URL || '' ;
607+ const uploadUrl = apiUrl . replace ( / \/ $ / , '' ) + '/v1/files/upload' ;
608+ const response = await fetch ( uploadUrl , {
609+ method : 'POST' ,
610+ body : formData ,
611+ } ) ;
629612
630- } catch ( fetchError : any ) {
631- // Check if this is a network error that indicates the upload might have succeeded
632- if ( fetchError . message &&
633- ( fetchError . message . includes ( 'NetworkError' ) ||
634- fetchError . message . includes ( 'Failed to fetch' ) ||
635- fetchError . message . includes ( 'CORS' ) ) ) {
636-
637- console . log ( `⚠️ Network/CORS error for ${ file . name } - checking if upload was successful...` ) ;
638-
639- // Wait a moment and refresh file list to check if file was uploaded
640- await new Promise ( resolve => setTimeout ( resolve , 2000 ) ) ;
641-
642- try {
643- // Get fresh file list from server
644- const freshResult = await getServerFiles ( identifier , accessKey , currentPath ) ;
645- if ( freshResult . success && freshResult . data ) {
646- // Check if the file now exists in the fresh server list
647- const fileExists = freshResult . data . some ( serverFile => serverFile . name === file . name ) ;
648-
649- if ( fileExists ) {
650- console . log ( `✅ File ${ file . name } was actually uploaded successfully despite network error` ) ;
651- // Update local state with fresh data
652- setServerFiles ( freshResult . data ) ;
653- setUploadProgress ( ( ( i + 1 ) / files . length ) * 100 ) ;
654- continue ; // Move to next file
655- } else {
656- console . error ( `❌ Upload failed for ${ file . name } :` , fetchError . message ) ;
657- console . log ( `❌ File ${ file . name } was not found on server after network error` ) ;
658- }
659- }
660- } catch ( checkError ) {
661- console . error ( `❌ Upload failed for ${ file . name } :` , fetchError . message ) ;
662- console . log ( `❌ Failed to verify upload for ${ file . name } :` , checkError ) ;
663- }
664-
665- // If we get here, the upload truly failed or we couldn't verify it
666- console . log ( `🚨 Treating as genuine upload failure for ${ file . name } ` ) ;
667- throw new Error ( `Erro de rede ao fazer upload de ${ file . name } . Verifique sua conexão e tente novamente.` ) ;
668- } else {
669- // Other types of errors - log immediately
670- console . error ( `❌ Upload failed for ${ file . name } :` , fetchError . message ) ;
671- throw new Error ( `Erro ao fazer upload de ${ file . name } : ${ fetchError . message } ` ) ;
672- }
673- }
613+ if ( response . ok ) {
614+ setUploadProgress ( 100 ) ;
615+ await fetchFiles ( currentPath ) ;
616+ setUploadProgress ( null ) ;
617+ console . log ( '🎉 Upload concluído com sucesso' ) ;
618+ } else {
619+ let errorMessage = `Erro HTTP ${ response . status } ao fazer upload.` ;
620+ try {
621+ const errorData = await response . json ( ) ;
622+ errorMessage = errorData ?. error || errorMessage ;
623+ } catch { }
624+ setFilesError ( errorMessage ) ;
625+ setUploadProgress ( null ) ;
674626 }
675-
676- // Final refresh and cleanup
677- await fetchFiles ( currentPath ) ;
678- setUploadProgress ( null ) ;
679-
680- console . log ( '🎉 All uploads completed successfully' ) ;
681-
682627 } catch ( err : any ) {
683628 const errorMessage = typeof err === 'string' ? err : ( err ?. message || "Erro ao fazer upload" ) ;
684629 setFilesError ( errorMessage ) ;
685630 setUploadProgress ( null ) ;
686631 console . error ( 'Upload error:' , err ) ;
687632 }
688-
633+
689634 // Reset input
690635 if ( event && event . target ) {
691636 ( event . target as HTMLInputElement ) . value = '' ;
0 commit comments