Instrument de încărcare de fișiere Java simplu, fără dependențe

Publicat: 2023-01-06

Una dintre cerințele fundamentale ale aplicațiilor web și site-urilor web contemporane este capacitatea de a încărca fișiere, cum ar fi documente, fotografii și videoclipuri. De exemplu, utilizatorii pot publica videoclipuri și imagini pe platforme de rețele sociale precum Instagram.

Implementarea și gestionarea procedurii de încărcare a fișierelor a fost anterior o sarcină dificilă. Din fericire, încărcările de fișiere au devenit mai simple ca urmare a progreselor tehnologiei online. De exemplu, un instrument de încărcare de fișiere Java face încărcarea fișierelor rapidă și convenabilă.

Cu toate acestea, prin încărcările de fișiere, infractorii cibernetici ar putea introduce programe malware sau alt conținut dăunător pe mașina dvs. și pot deteriora serverul. Prin urmare, dezvoltatorii trebuie să se asigure că încărcarea fișierelor pe site-ul lor web sau aplicația web este sigură. Pentru a stabili o încărcare sigură a fișierelor, vă recomandăm să utilizați un SDK de încărcare a fișierelor Java fiabil.

Vom analiza cum să folosiți Java pentru a crea un instrument de încărcare de fișiere în acest articol.

Cum se implementează un instrument de încărcare de fișiere folosind Java?

Un instrument de încărcare de fișiere nu este altceva decât o „trimitere” pe care utilizatorii pot face clic pentru a încărca un fișier pe o aplicație web sau un site web. Cu toate acestea, un instrument de încărcare de fișiere înseamnă mult mai mult pentru dezvoltatori.

Putem crea un simplu încărcător de fișiere în care folosim doar un formular HTML și un servlet. În exemplul nostru, formularul HTML va avea două câmpuri de intrare. Un câmp de introducere permite utilizatorului să-și încarce fișierul, iar al doilea câmp de introducere permite dezvoltatorului să ne spună unde ar trebui să stocăm fișierul.

Dam în judecată metoda POST pentru a trimite datele din formular, inclusiv fișierul, către server. De asemenea, atunci când încărcăm fișiere, folosim criptarea="multipart/form-data" deoarece fișierele conțin o mulțime de caractere care nu pot fi imprimate.

Servletul gestionează cererea POST și extrage fișierul din flux după procesarea datelor din fișierul primit. Destinația specifică locația din sistem în care trebuie să fie salvat fișierul. Când apăsăm butonul Încărcare, datele sunt transmise către servlet, care apoi stochează Fișierul în locația desemnată.

Crearea unui fișier HTML cu câmpul de introducere

Înainte de a începe, creați un fișier index.html de urmat.

index.html ar trebui să aibă următorul cod:

<!DOCTYPE html>
<html lang="ro">
<cap>
<title>Incarcator de fișiere Java</title>
<meta http-equiv="Content-Type” content="text/html; set de caractere=UTF-8″>
</cap>
<corp>
<form method=”POST” action=”upload” enctype=”multipart/form-data” >
Fişier:
<input type=”file” name=”java-file” id=”java-file” /> <br/>
Destinaţie:
<input type=”text” value=”/java-folder” name=”destinație”/>
</br>
<input type=”submit” value=”Submit” name=”submit” id=”submit” />
</form>
</corp>
</html>

Iată cum ar trebui să fie pagina ta:

Gestionarea procesării pe server a fișierului

Pentru a scrie codul servlet-ului, vom crea un fișier numit FileUploadServlet.java. Serlet-urile folosesc adnotări pentru a defini componente și metadate. Deci, adnotarea @WebServlet este folosită pentru a defini o componentă servlet în Java.

Adnotarea servlet-ului ar trebui să spună ce HttpServlet trebuie executat pentru ce URL. Pentru asta, definim parametrii nume și ulrPattern în adnotarea noastră @WebServlet. Rețineți că, atunci când trimitem formularul nostru, vom redirecționa către adresa URL /upload unde va fi executată clasa FileUploadServlet.

Adnotarea @MultipartConfig informează servletul că va primi date multipart/form-date în tip MIME.

Să scriem codul nostru complet acum.

@WebServlet (nume = „FileUploadServlet” , urlPatterns = { „/upload” })
@MultipartConfig
clasa publică FileUploadServlet extinde HttpServlet {

private final static Logger LOGGER =
Logger.getLogger(FileUploadServlet.class.getCanonicalName());

protected void processRequest (solicitare HttpServletRequest,
răspuns HttpServletResponse)
aruncă ServletException, IOException {
response.setContentType( „text/html;charset=UTF-8” );

final String dest= request.getParameter( „destinație” );
partea finală a piesei = request.getPart( „fișier” );
final String nameOfFile = getFileName(part);

OutputStream out = null ;
InputStream cont = null ;
final PrintWriter printWriter = response.getWriter();

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

int cititor = 0 ;
octet final[] octeți = octet nou [ 1024 ];

while ((cititor = cont.read(bytes)) != -1 ) {
out.write(octeți, 0 , cititor);
}
printWriter.println( „Fișier „ + nameOfFile + ” creat la „ + dest);
LOGGER.log(Level.INFO, „Fișier{0} încărcat în {1}” ,
obiect nou []{nameOfFile, dest});
} catch (FileNotFoundException fne) {
printWriter.println( „Nu ați menționat un nume de fișier sau sunteți „
+ „încercarea de a încărca un fișier într-un fișier inexistent”
+ „locație”. );
printWriter.println( „<br/> EROARE: „ + fne.getMessage());

LOGGER.log(Level.SEVERE, „Eroare la încărcarea fișierului. Eroare: {0}” ,
obiect nou []{fne.getMessage()});
} in sfarsit {
if (out != null ) {
out.close();
}
if (cont != null ) {
cont.close();
}
if (printWriter != null ) {
printWriter.close();
}
}
}

private String getFileName(partea finală) {
final String partHeader = part.getHeader( „conținut-dispoziție” );
LOGGER.log(Level.INFO, „Part Header = {0}” , partHeader);
pentru (Conținut șir: part.getHeader( „conținut-dispoziție” ).split( „;” )) {
dacă (conținut.trim().startsWith( „nume fișier” )) {
returnează conținut.substring(
content.indexOf( '=' ) + 1 ).trim().replace( “\”” , “” );
}
}
returnează nul ;
}
}

Metoda processRequest invocă metoda getFileName pentru a obține numele fișierului din partea de fișier după ce a preluat destinația și partea de fișier din cerere. După aceea, metoda creează un FileOutputStream și transferă fișierul în locația dorită. Partea de tratare a erorilor a metodei detectează și abordează câteva dintre cele mai frecvente cauze ale erorilor de fișier negăsit.

Implementați codul

Acum trebuie să construim și să rulăm programul nostru. Pentru aceasta, puteți utiliza oricare dintre IDE-urile dvs. preferate, cum ar fi NetBeans, Eclipse, Intellij Idea etc. Odată ce ați făcut asta, mergeți parțial la

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

Dacă utilizați NetBeans, deschideți Netbeans IDE și navigați la directorul de lucru. Consultați documentația oficială Java dacă aveți probleme. Faceți clic dreapta pe folderul dvs. în fila Proiecte și alegeți Implementare. Apoi, putem accesa browserul și introducem adresa URL de mai jos:

http://localhost:8080/{foldername}/

Pagina HTML creată mai sus se va deschide după ce introduceți adresa URL și apăsați tasta Enter. Pentru a încărca un fișier în locația dorită, putem căuta în sistem și alege fișierul. Introducem calea către folderul în care dorim să stocăm Fișierul în zona de destinație. Directorul trebuie să poată fi scris și să existe deja în sistem. Când facem clic pe butonul de încărcare cu câmpul de destinație gol, se ridică o excepție.

Servletul primește o solicitare POST când facem clic pe butonul de încărcare și copiază fișierul selectat în folderul specificat.

Putem vizita folderul desemnat și putem verifica dacă fișierul încărcat (de exemplu TextFile.txt) este acolo după ce facem clic pe butonul de încărcare.

Până acum, am construit un simplu instrument de încărcare de fișiere Java folosind HTML și Java. Cu toate acestea, pe măsură ce „simplul” devine un program de încărcare complex cu multe caracteristici, ar putea fi dificil să ținem evidența caracteristicilor importante de la cele care nu sunt. Ca să nu mai vorbim că există mai multe probleme de securitate atunci când luăm în considerare construirea unui uploader de la zero. Prin urmare, următoarea secțiune vă va explica cum puteți încărca fișiere cu SDK-ul securizat Fileestack.

Cum să încărcați cu ușurință fișiere cu Filestack SDK

Pentru a continua, veți avea nevoie de o cheie API Fileestack .

Pentru a începe, instalați SDK-ul Filestack folosind comanda de mai jos:

implementare „com.filestack:filestack-java:0.9.0”

Pentru a implementa funcțiile de încărcare folosind Filestack, utilizați următorul cod în fișierul Java:

// Crearea clientului
Configurare configurație = configurație nouă ( „API_KEY” );
Client client = client nou (configurare);

// Setarea opțiunilor și a metadatelor legate de încărcare
Opțiunea StorageOptions = noua StorageOptions.Builder()
.mimeType( „text/plain” )
.filename( „fișier.txt” )
.construi();

// Efectuați o încărcare sincronă
Fișiere FileLink = client.upload( „/filepath” , false );

// Efectuați o încărcare asincronă
Flowable<Progress<FileLink>> upload = client.uploadAsync( „filepath” , false );
upload.doOnNext( nou consumator<Progress<FileLink>>() {
@Trece peste
public void accept(Progress<FileLink> progress) aruncă Excepție {
System.out.printf( „%f%% Fișierul dvs. este încărcat\n” , progress.getPercent());
dacă (progress.getData() != null ) {
Fișiere FileLink = progres.getData();
}
}
});

Pentru a vă asigura că funcționează, pot fi efectuate următoarele teste:

./fișiere test

În cazul în care doriți să vă implementați aplicația, Bintray este ținta implementărilor. Pentru implementare, aveți nevoie de un cont de utilizator care a fost înregistrat la organizația Filestack. Respectați și regulile de bază pentru lansarea Filestack. Sunt necesare variabilele de mediu „BINTRAY USER” și „BINTRAY API KEY”. A alerga:

exportă BINTRAY_USER=
exportă BINTRAY_API_KEY=
./files bintrayUpload

Concluzie

De asemenea, puteți opta pentru un instrument terță parte dacă vi se pare dificil să întrețineți și să vă creați propriul sistem de încărcare a fișierelor Java. Din cauza problemelor legate de securitatea datelor și de confidențialitate, oamenii pot evita utilizarea sistemelor terțe, de exemplu atunci când încarcă fișiere care conțin fișe medicale.

În plus, își fac griji că vor avea puțin control asupra cine are acces la infrastructura de stocare a fișierelor. Cu toate acestea, puteți garanta securitatea datelor din formulare și documente prin utilizarea unei soluții de încredere de încărcare a fișierelor.

Întrebări frecvente (FAQs)

Puteți muta fișiere folosind un API?

Da. Mutarea fișierelor folosind un API se poate face folosind instrumente bazate pe API disponibile pe piață. Acest lucru poate fi combinat cu programe care rulează pe diverse platforme, cum ar fi programe online, de asemenea.

Pot trimite un fișier mare la REST API?

Poate fi dificil să încărcați fișiere mari, mai ales atunci când sunt prezenți alți factori precum lățimea de bandă slabă și conexiunile la rețea. Poate duce la numeroase erori de încărcare.

Cum citește Java un fișier încărcat?

Folosind fluxuri de intrare, un program Java citește colecții de octeți sau caractere. Citirea fișierului este o operație secvențială care începe cu construirea obiectului fișier, îl transmite fișierului de intrare, citește datele din flux, le procesează și apoi închide fluxul și obiectul fișier.

Ce este un instrument de încărcare de fișiere?

Este un API sau un plugin care poate fi conectat la aplicația dvs. web și permite utilizatorilor să încarce fotografii, videoclipuri și fișiere text, precum și să permită unele modificări de bază, efecte de filtrare etc.