Prosty program do przesyłania plików Java bez zależności

Opublikowany: 2023-01-06

Jednym z podstawowych wymagań stawianych współczesnym aplikacjom i stronom internetowym jest możliwość przesyłania plików, takich jak dokumenty, zdjęcia czy filmy. Na przykład użytkownicy mogą publikować filmy i obrazy na platformach społecznościowych, takich jak Instagram.

Wdrożenie i zarządzanie procedurą przesyłania plików było wcześniej trudnym zadaniem. Na szczęście przesyłanie plików stało się prostsze dzięki postępowi w technologii online. Na przykład program do przesyłania plików Java sprawia, że ​​przesyłanie plików jest szybkie i wygodne.

Jednak poprzez przesyłanie plików cyberprzestępcy mogą wprowadzić złośliwe oprogramowanie lub inną szkodliwą zawartość na twój komputer i uszkodzić serwer. Programiści muszą zatem mieć absolutną pewność, że przesyłanie plików na ich stronie internetowej lub aplikacji internetowej jest bezpieczne. Aby zapewnić bezpieczne przesyłanie plików, zalecamy korzystanie z niezawodnego pakietu SDK do przesyłania plików Java.

W tym artykule omówimy, jak używać języka Java do tworzenia narzędzia do przesyłania plików.

Jak zaimplementować program do przesyłania plików przy użyciu języka Java?

Narzędzie do przesyłania plików to nic innego jak „prześlij”, które użytkownicy mogą kliknąć, aby przesłać plik do aplikacji internetowej lub strony internetowej. Przesyłacz plików oznacza jednak znacznie więcej dla programistów.

Możemy stworzyć prosty program do przesyłania plików, w którym używamy tylko formularza HTML i serwletu. W naszym przykładzie formularz HTML będzie miał dwa pola wprowadzania. Jedno pole wejściowe pozwala użytkownikowi przesłać swój plik, a drugie pole wejściowe pozwala programiście powiedzieć nam, gdzie powinniśmy przechowywać plik.

Pozywamy metodę POST, aby wysłać dane formularza wraz z plikiem na serwer. Ponadto, kiedy przesyłamy pliki, używamy encrypt="multipart/form-data", ponieważ pliki zawierają wiele znaków niedrukowalnych.

Serwlet zarządza żądaniem POST i wyodrębnia plik ze strumienia po przetworzeniu przychodzących danych pliku. Miejsce docelowe określa lokalizację w systemie, w której plik musi zostać zapisany. Kiedy wciskamy przycisk Prześlij, dane są przesyłane do serwletu, który następnie przechowuje plik w wyznaczonym miejscu.

Tworzenie pliku HTML z polem wejściowym

Zanim zaczniemy, utwórz plik index.html , aby kontynuować.

Plik index.html powinien mieć następujący kod:

<!DOCTYPE html>
<html lang="pl">
<głowa>
<title>Program do przesyłania plików Java</title>
<meta http-equiv=”Typ zawartości” content=”tekst/html; charset=UTF-8″>
</head>
<ciało>
<form method=”POST” action=”upload” enctype=”multipart/form-data” >
Plik:
<input type=”file” name=”java-file” id=”java-file” /> <br/>
Miejsce docelowe:
<input type=”text” value=”/java-folder” name=”destination”/>
</br>
<input type=”prześlij” value=”Prześlij” name=”prześlij” id=”prześlij” />
</form>
</body>
</html>

Oto, jak powinna wyglądać Twoja strona:

Obsługa przetwarzania pliku po stronie serwera

Aby napisać kod serwletu, utworzymy plik o nazwie FileUploadServlet.java. Serlety używają adnotacji do definiowania komponentów i metadanych. Tak więc adnotacja @WebServlet jest używana do definiowania komponentu serwletu w Javie.

Adnotacja serwletu powinna wskazywać, który HttpServlet powinien zostać wykonany dla którego adresu URL. W tym celu definiujemy parametry name i ulrPattern w naszej adnotacji @WebServlet. Zauważ, że kiedy przesyłamy nasz formularz, przekierowujemy do adresu URL /upload, w którym zostanie wykonana klasa FileUploadServlet.

Adnotacja @MultipartConfig informuje aplet, że otrzyma dane wieloczęściowe/formularza w typie MIME.

Napiszmy teraz nasz kompletny kod.

@WebServlet(nazwa = „FileUploadServlet” , urlPatterns = { „/upload” })
@MultipartConfig
klasa publiczna FileUploadServlet rozszerza HttpServlet {

prywatny końcowy statyczny Logger LOGGER =
Logger.getLogger(FileUploadServlet.class.getCanonicalName());

chroniony nieważny processRequest (żądanie HttpServletRequest,
odpowiedź HttpServletResponse)
wyrzuca ServletException, IOException {
response.setContentType( "text/html;charset=UTF-8" );

final String dest= request.getParameter( „miejsce docelowe” );
ostateczna część część = request.getPart( "plik" );
final String nameOfFile = getFileName(part);

OutputStream out = null ;
Strumień wejściowy cont = null ;
final PrintWriter printWriter = response.getWriter();

spróbuj {
out = new FileOutputStream( new File(dest + File.separator
+ nazwaPliku));
cont = part.getInputStream();

czytnik int = 0 ;
ostatni bajt [] bajtów = nowy bajt [ 1024 ];

while ((reader = cont.read(bytes)) != -1 ) {
out.write(bajty, 0 , czytnik);
}
printWriter.println( „Plik „ + nameOfFile + ” utworzony w „ + dest);
LOGGER.log(Level.INFO, „Plik{0} przesłany do {1}” ,
nowy obiekt [] {nazwa pliku, miejsce docelowe});
} catch (FileNotFoundException fne) {
printWriter.println( "Nie podałeś nazwy pliku lub jesteś "
+ „próba przesłania pliku do nieistniejącego”
+ „lokalizacja”. );
printWriter.println( “<br/> BŁĄD: “ + fne.getMessage());

LOGGER.log(Level.SEVERE, „Błąd podczas przesyłania pliku. Błąd: {0}” ,
nowy obiekt[]{fne.getMessage()});
} wreszcie {
if (out != null ) {
out.close();
}
if (cont != null ) {
kont.zamknij();
}
if (printWriter != null ) {
printWriter.close();
}
}
}

private String getFileName(ostatnia część części) {
final String partHeader = part.getHeader( "dyspozycja treści" );
LOGGER.log(Level.INFO, „Nagłówek części = {0}” , nagłówek części);
for (Zawartość ciągu: part.getHeader( "dyspozycja-zawartości" ).split( ";" )) {
if (content.trim().startsWith( „nazwa pliku” )) {
zwróć treść.podłańcuch(
content.indexOf( '=' ) + 1 ).trim().replace( “\”” , “” );
}
}
zwróć wartość null ;
}
}

Metoda processRequest wywołuje metodę getFileName w celu uzyskania nazwy pliku z części pliku po pobraniu miejsca docelowego i części pliku z żądania. Następnie metoda tworzy FileOutputStream i przesyła plik do żądanej lokalizacji. Część obsługi błędów metody wykrywa i usuwa kilka najczęstszych przyczyn błędów nieznalezionych plików.

Wdróż kod

Teraz musimy zbudować i uruchomić nasz program. W tym celu możesz użyć dowolnego preferowanego IDE, takiego jak NetBeans, Eclipse, Intellij Idea itp. Gdy to zrobisz, przejdź do

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

Jeśli używasz NetBeans, otwórz Netbeans IDE i przejdź do katalogu roboczego. W razie problemów zajrzyj do oficjalnej dokumentacji Javy. Kliknij prawym przyciskiem myszy swój folder na karcie Projekty i wybierz polecenie Wdróż. Następnie możemy uzyskać dostęp do przeglądarki i wpisać poniższy adres URL:

http://localhost:8080/{nazwa_folderu}/

Utworzona powyżej strona HTML otworzy się po wprowadzeniu adresu URL i naciśnięciu klawisza Enter. Aby przesłać plik do wybranej lokalizacji, możemy przeszukać system i wybrać plik. W obszarze docelowym wpisujemy ścieżkę do folderu, w którym chcemy przechowywać Plik. Katalog musi być zapisywalny i musi już istnieć w systemie. Gdy klikniemy przycisk wysyłania z pustym polem docelowym, zgłaszany jest wyjątek.

Serwlet otrzymuje żądanie POST, kiedy klikamy przycisk przesyłania, i kopiuje wybrany plik do określonego folderu.

Możemy odwiedzić wyznaczony folder i sprawdzić, czy załadowany plik (na przykład TextFile.txt) jest tam po kliknięciu przycisku wysyłania.

Do tej pory tworzyliśmy prosty program do przesyłania plików w Javie, używając HTML i Javy. Ponieważ jednak „proste” staje się złożonym narzędziem do przesyłania z wieloma funkcjami, może być trudno oddzielić ważne funkcje od tych, które nie są. Nie wspominając o tym, że istnieje kilka problemów związanych z bezpieczeństwem, gdy rozważamy zbudowanie programu do przesyłania od podstaw. Dlatego następna sekcja przeprowadzi Cię przez proces przesyłania plików za pomocą bezpiecznego zestawu Filestack SDK.

Jak łatwo przesyłać pliki za pomocą Filestack SDK

Aby kontynuować, będziesz potrzebować klucza Filestack API .

Aby rozpocząć, zainstaluj Filestack SDK za pomocą poniższego polecenia:

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

Aby zaimplementować funkcje przesyłania za pomocą Filestack, użyj następującego kodu w swoim pliku Java:

// Tworzenie klienta
Konfiguracja konfiguracji = nowa konfiguracja ( „API_KEY” );
Klient klient = nowy Klient (konfiguracja);

// Ustawianie opcji i metadanych związanych z przesyłaniem
StorageOptions opcja = nowa StorageOptions.Builder()
.mimeType( "tekst/zwykły" )
.nazwa pliku( „plik.txt” )
.budować();

// Wykonaj synchroniczne przesyłanie
Pliki FileLink = client.upload( “/ścieżka do pliku” , false );

// Wykonaj przesyłanie asynchroniczne
Flowable<Progress<Link do pliku>> upload = client.uploadAsync( "ścieżka do pliku" , false );
upload.doOnNext( new Konsument<Progress<Link do Pliku>>() {
@Nadpisanie
public void accept(Progress<FileLink> progress) zgłasza wyjątek {
System.out.printf( "%f%% Twój plik został przesłany\n" , progress.getPercent());
if (progress.getData() != null ) {
Pliki FileLink = progress.getData();
}
}
});

Aby upewnić się, że działa, można przeprowadzić następujące testy:

./pliki testowe

Jeśli chcesz wdrożyć swoją aplikację, Bintray jest celem wdrożeń. Aby wdrożyć, potrzebujesz konta użytkownika zarejestrowanego w organizacji Filestack. Przestrzegaj również podstawowych wytycznych dotyczących wydań Filestack. Potrzebne są zmienne środowiskowe „BINTRAY USER” i „BINTRAY API KEY”. Biegać:

eksport BINTRAY_USER=
wyeksportuj BINTRAY_API_KEY=
./pliki bintrayUpload

Wniosek

Możesz także zdecydować się na narzędzie innej firmy, jeśli utrzymanie i stworzenie własnego systemu przesyłania plików Java jest trudne. Ze względu na obawy związane z bezpieczeństwem danych i prywatnością ludzie mogą unikać korzystania z systemów stron trzecich, na przykład podczas przesyłania plików zawierających dokumentację medyczną.

Ponadto obawiają się, że będą mieli niewielką kontrolę nad tym, kto ma dostęp do infrastruktury przechowywania plików. Możesz jednak zagwarantować bezpieczeństwo danych formularzy i dokumentów, korzystając z niezawodnego rozwiązania do przesyłania plików.

Często zadawane pytania (FAQ)

Czy możesz przenosić pliki za pomocą interfejsu API?

Tak. Przenoszenie plików za pomocą interfejsu API można wykonać za pomocą dostępnych na rynku narzędzi opartych na interfejsie API. Można to połączyć z programami działającymi na różnych platformach, takich jak programy online.

Czy mogę przesłać duży plik do REST API?

Przesyłanie dużych plików może być trudne, zwłaszcza gdy występują inne czynniki, takie jak słaba przepustowość i połączenia sieciowe. Może to spowodować liczne błędy przesyłania.

W jaki sposób Java odczytuje przesłany plik?

Korzystając ze strumieni wejściowych, program Java odczytuje zbiory bajtów lub znaków. Odczyt pliku to sekwencyjna operacja, która zaczyna się od skonstruowania obiektu pliku, przekazuje go do pliku wejściowego, odczytuje dane ze strumienia, przetwarza je, a następnie zamyka strumień i obiekt pliku.

Co to jest narzędzie do przesyłania plików?

Jest to interfejs API lub wtyczka, którą można podłączyć do aplikacji internetowej i umożliwić użytkownikom przesyłanie zdjęć, filmów i plików tekstowych, a także umożliwić pewne podstawowe modyfikacje, efekty filtrów itp.