Caricatore di file Java semplice senza dipendenze

Pubblicato: 2023-01-06

Uno dei requisiti fondamentali delle applicazioni web e dei siti web contemporanei è la possibilità di caricare file, come documenti, foto e video. Ad esempio, gli utenti possono pubblicare video e immagini su piattaforme di social network come Instagram.

L'implementazione e la gestione della procedura di caricamento dei file era in precedenza un compito difficile. Per fortuna, i caricamenti di file sono diventati più semplici grazie ai progressi della tecnologia online. Ad esempio, un caricatore di file Java rende il caricamento dei file rapido e conveniente.

Tuttavia, attraverso il caricamento di file, i criminali informatici potrebbero introdurre malware o altri contenuti dannosi sul tuo computer e corrompere il server. Gli sviluppatori devono quindi assicurarsi assolutamente che il caricamento di file sul proprio sito Web o applicazione Web sia sicuro. Per stabilire un caricamento sicuro dei file, ti consigliamo di utilizzare un SDK affidabile per il caricamento dei file Java.

Esamineremo come utilizzare Java per creare un caricatore di file in questo articolo.

Come implementare un caricatore di file utilizzando Java?

Un file uploader non è altro che un "invio" su cui gli utenti possono fare clic per caricare un file su un'applicazione Web o un sito Web. Un caricatore di file, tuttavia, significa molto di più per gli sviluppatori.

Possiamo creare un semplice uploader di file in cui utilizziamo solo un modulo HTML e un servlet. Nel nostro esempio, il modulo HTML avrà due campi di input. Un campo di input consente all'utente di caricare il proprio file e il secondo campo di input consente allo sviluppatore di dirci dove archiviare il file.

Stiamo facendo causa al metodo POST per inviare i dati del modulo, incluso il file, al server. Inoltre, quando eseguiamo i caricamenti di file, utilizziamo encrypt="multipart/form-data" perché i file contengono molti caratteri non stampabili.

Il servlet gestisce la richiesta POST ed estrae il file dal flusso dopo aver elaborato i dati del file in entrata. La destinazione specifica la posizione nel sistema in cui il file deve essere salvato. Quando premiamo il pulsante Carica, i dati vengono trasmessi al servlet, che quindi memorizza il file nella posizione designata.

Creazione di un file HTML con il campo di input

Prima di iniziare, crea un file index.html da seguire.

Il index.html dovrebbe avere il seguente codice:

<!DOCTYPE html>
<html lang=”it”>
<testa>
<title>Caricatore di file Java</title>
<meta http-equiv=”Content-Type” content=”text/html; charset=UTF-8″>
</head>
<corpo>
<form method=”POST” action=”upload” enctype=”multipart/form-data” >
File:
<input type=”file” name=”java-file” id=”java-file” /> <br/>
Destinazione:
<input type=”text” value=”/java-folder” name=”destination”/>
</br>
<input type=”submit” value=”Submit” name=”submit” id=”submit” />
</form>
</corpo>
</html>

Ecco come dovrebbe essere la tua pagina:

Gestione dell'elaborazione lato server del file

Per scrivere il codice servlet, creeremo un file chiamato FileUploadServlet.java. I serlet utilizzano le annotazioni per definire componenti e metadati. Quindi l'annotazione @WebServlet viene utilizzata per definire un componente servlet in Java.

L'annotazione servlet dovrebbe indicare quale HttpServlet deve essere eseguito per quale URL. Per questo, stiamo definendo i parametri name e ulrPattern nella nostra annotazione @WebServlet. Si noti che, quando inviamo il nostro modulo, reindirizzeremo all'URL di /upload dove verrà eseguita la classe FileUploadServlet.

L'annotazione @MultipartConfig informa il servlet che riceverà dati multipart/form nel tipo MIME.

Scriviamo ora il nostro codice completo.

@WebServlet(name = “FileUploadServlet” , urlPatterns = { “/upload” })
@MultipartConfig
classe pubblica FileUploadServlet estende HttpServlet {

Logger statico finale privato LOGGER =
Logger.getLogger(FileUploadServlet.class.getCanonicalName());

protected void processRequest(Richiesta HttpServletRequest,
Risposta HttpServletResponse)
lancia ServletException, IOException {
response.setContentType( “text/html;charset=UTF-8” );

final String dest= request.getParameter( “destinazione” );
parte finale parte = request.getPart( “file” );
final String nameOfFile = getFileName(part);

OutputStream out = nullo ;
InputStream cont = nullo ;
finale PrintWriter printWriter = response.getWriter();

prova {
out = new FileOutputStream( new File(dest + File.separator
+ nomeFile));
cont = part.getInputStream();

int lettore = 0 ;
byte finale[] byte = nuovo byte[ 1024 ];

while ((lettore = cont.read(bytes)) != -1 ) {
out.write(bytes, 0 , lettore);
}
printWriter.println( “File “ + nameOfFile + ” creato in “ + dest);
LOGGER.log(Level.INFO, "File{0} caricato su {1}" ,
new Object[]{nameOfFile, dest});
} catch (FileNotFoundException fne) {
printWriter.println( "Non hai menzionato il nome di un file o lo sei"
+ "cercando di caricare un file su un sito inesistente"
+ "posizione". );
printWriter.println( “<br/> ERRORE: “ + fne.getMessage());

LOGGER.log(Level.SEVERE, "Errore durante il caricamento del file. Errore: {0}" ,
nuovo Oggetto[]{fne.getMessage()});
} infine {
if (out != null ) {
fuori.chiudi();
}
if (cont != null ) {
cont.chiudi();
}
if (printWriter != null ) {
printWriter.close();
}
}
}

private String getFileName(final Part part) {
final String partHeader = part.getHeader( “content-disposition” );
LOGGER.log(Level.INFO, “Part Header = {0}” , partHeader);
for (String content : part.getHeader( “content-disposition” ).split( “;” )) {
if (content.trim().startsWith( “nomefile” )) {
restituisce contenuto.substring(
content.indexOf( '=' ) + 1 ).trim().replace( “\”” , “” );
}
}
ritorno nullo ;
}
}

Il metodo processRequest richiama il metodo getFileName per ottenere il nome file dalla parte file dopo aver recuperato la destinazione e la parte file dalla richiesta. Successivamente, il metodo crea un FileOutputStream e trasferisce il file nella posizione desiderata. La parte di gestione degli errori del metodo rileva e risolve alcune delle cause più frequenti di errori di file non trovato.

Distribuisci il codice

Ora dobbiamo costruire ed eseguire il nostro programma. Per questo, puoi utilizzare uno qualsiasi dei tuoi IDE preferiti come NetBeans, Eclipse, Intellij Idea ecc. Una volta fatto ciò, parte vai al

https://cdn.pixabay.com/photo/2016/11/30/20/58/programming-1873854__340.png

Se stai utilizzando NetBeans, apri Netbeans IDE e vai alla directory di lavoro. Fare riferimento alla documentazione ufficiale di Java in caso di problemi. Fai clic con il pulsante destro del mouse sulla cartella nella scheda Progetti e scegli Distribuisci. Successivamente, possiamo accedere al browser e digitare l'URL seguente:

http://localhost:8080/{nomecartella}/

La pagina HTML sopra creata si aprirà dopo aver inserito l'URL e premuto il tasto Invio. Per caricare un file nella posizione desiderata, possiamo cercare nel sistema e scegliere il file. Digitiamo il percorso della cartella in cui vogliamo memorizzare il file nell'area di destinazione. La directory deve essere scrivibile ed esistere già nel sistema. Quando facciamo clic sul pulsante di caricamento con il campo di destinazione vuoto, viene sollevata un'eccezione.

Il servlet riceve una richiesta POST quando facciamo clic sul pulsante di caricamento e copia il file selezionato nella cartella specificata.

Possiamo visitare la cartella designata e verificare se il file caricato (ad esempio TextFile.txt) è presente dopo aver fatto clic sul pulsante di caricamento.

Fino ad ora, abbiamo creato un semplice caricatore di file Java utilizzando HTML e Java. Tuttavia, poiché il "semplice" diventa un uploader complesso con molte funzionalità, potrebbe essere difficile tenere traccia delle funzionalità importanti da quelle che non lo sono. Per non parlare del fatto che ci sono diversi problemi di sicurezza quando consideriamo la creazione di un uploader da zero. Pertanto, la sezione successiva ti illustrerà come caricare i file con l'SDK Filestack sicuro.

Come caricare facilmente file con Filestack SDK

Per proseguire, avrai bisogno di una chiave API Filestack .

Per iniziare, installa Filestack SDK utilizzando il comando seguente:

implementazione 'com.filestack:filestack-java:0.9.0'

Per implementare le funzionalità di caricamento utilizzando Filestack, utilizza il seguente codice nel tuo file Java:

// Creazione del client
Configurazione configurazione = new Config( “API_KEY” );
Cliente client = nuovo Cliente(configurazione);

// Opzioni di impostazione e metadati relativi al caricamento
Opzione StorageOptions = new StorageOptions.Builder()
.mimeType( “testo/semplice” )
.nomefile( “file.txt” )
.costruire();

// Esegue un caricamento sincrono
File FileLink = client.upload( “/filepath” , false );

// Esegue un caricamento asincrono
Flowable<Progress<FileLink>> upload = client.uploadAsync( “filepath” , false );
upload.doOnNext( new Consumer<Progress<FileLink>>() {
@Oltrepassare
public void accept(Progress<FileLink> progress) genera un'eccezione {
System.out.printf( “%f%% Il tuo file è stato caricato\n” , progress.getPercent());
if (progress.getData() != null ) {
File FileLink = progress.getData();
}
}
});

Per assicurarsi che funzioni, è possibile eseguire i seguenti test:

./test dei file

Nel caso in cui tu stia cercando di distribuire la tua app, Bintray è l'obiettivo delle distribuzioni. Per distribuire, è necessario un account utente registrato con l'organizzazione Filestack. Osserva anche le linee guida di base per il rilascio di Filestack. Sono necessarie le variabili di ambiente "BINTRAY USER" e "BINTRAY API KEY". Correre:

esporta BINTRAY_USER=
esporta BINTRAY_API_KEY=
./files bintrayUpload

Conclusione

Puoi anche optare per uno strumento di terze parti se trovi difficile mantenere e creare il tuo sistema di caricamento file Java. A causa di problemi di sicurezza e privacy dei dati, le persone potrebbero evitare di utilizzare sistemi di terze parti, ad esempio durante il caricamento di file contenenti cartelle cliniche.

Inoltre, temono di avere poco controllo su chi ha accesso all'infrastruttura di archiviazione dei file. Tuttavia, puoi garantire la sicurezza dei dati di moduli e documenti utilizzando una soluzione affidabile per il caricamento dei file.

Domande frequenti (FAQ)

Puoi spostare i file utilizzando un'API?

Sì. Lo spostamento di file utilizzando un'API può essere eseguito utilizzando strumenti basati su API disponibili sul mercato. Questo può essere combinato con programmi in esecuzione su varie piattaforme come anche programmi online.

Posso inviare un file di grandi dimensioni all'API REST?

Può essere difficile caricare file di grandi dimensioni, specialmente quando sono presenti altri fattori come larghezza di banda ridotta e connessioni di rete. Può causare numerosi errori di caricamento.

In che modo Java legge un file caricato?

Utilizzando flussi di input, un programma Java legge raccolte di byte o caratteri. La lettura del file è un'operazione sequenziale che inizia con la costruzione dell'oggetto file, lo passa al file di input, legge i dati dal flusso, li elabora e quindi chiude il flusso e l'oggetto file.

Che cos'è uno strumento di caricamento file?

È un'API o un plug-in che può essere collegato alla tua applicazione Web e consente agli utenti di caricare foto, video e file di testo, nonché consentire alcune modifiche di base, effetti di filtro, ecc.