依存関係のないシンプルな Java ファイル アップローダ

公開: 2023-01-06

最新の Web アプリケーションおよび Web サイトの基本的な要件の 1 つは、ドキュメント、写真、ビデオなどのファイルをアップロードする機能です。 たとえば、ユーザーは Instagram などのソーシャル ネットワーキング プラットフォームで動画や画像を公開できます。

ファイルのアップロード手順の実装と管理は、以前は困難な作業でした。 ありがたいことに、オンライン テクノロジーの進歩により、ファイルのアップロードがより簡単になりました。 たとえば、 Java ファイル アップローダーは、ファイルのアップロードを迅速かつ便利にします。

ただし、ファイルのアップロードを通じて、サイバー犯罪者がマルウェアやその他の有害なコンテンツをマシンに導入し、サーバーを破損させる可能性があります。 したがって、開発者は、Web サイトまたは Web アプリケーションへのファイルのアップロードが安全であることを完全に確認する必要があります。 安全なファイル アップロードを確立するには、信頼できる Java ファイル アップロード SDK を使用することをお勧めします。

この記事では、Java を使用してファイル アップローダーを作成する方法について説明します。

Java を使用してファイル アップローダを実装するには?

ファイル アップローダーは、ユーザーがクリックしてファイルを Web アプリケーションまたは Web サイトにアップロードできる「送信」にすぎません。 ただし、ファイル アップローダは、開発者にとってより多くのことを意味します。

HTML フォームとサーブレットのみを使用する単純なファイル アップローダーを作成できます。 この例では、HTML フォームに 2 つの入力フィールドがあります。 1 つの入力フィールドでユーザーはファイルをアップロードでき、2 つ目の入力フィールドで開発者はファイルの保存場所を指定できます。

このファイルを含むフォームデータをサーバーに送信するために POST メソッドを使用しています。 また、ファイルのアップロードを行うときは、encrypt="multipart/form-data" を使用します。これは、ファイルに印刷できない文字が多数含まれているためです。

サーブレットは POST 要求を管理し、受信ファイル データを処理した後、ストリームからファイルを抽出します。 宛先は、ファイルを保存する必要があるシステム内の場所を指定します。 [アップロード] ボタンを押すと、データがサーブレットに送信され、指定された場所にファイルが保存されます。

入力フィールドを含む HTML ファイルの作成

始める前に、従うべきindex.htmlファイルを作成します。

index.htmlには次のコードが必要です

<!DOCTYPE html>
<html lang=”en”>
<頭>
<title>Java ファイル アップローダー</title>
<meta http-equiv="Content-Type" content="text/html; 文字セット=UTF-8″>
</head>
<本体>
<form method=”POST” action=”upload” enctype=”multipart/form-data” >
ファイル:
<input type=”file” name=”java-file” id=”java-file” /> <br/>
行き先:
<input type="text" value="/java-folder" name="destination"/>
</br>
<input type="submit" value="submit" name="submit" id="submit" />
</フォーム>
</body>
</html>

ページは次のようになります。

ファイルのサーバー側処理の処理

サーブレット コードを書き出すために、FileUploadServlet.java というファイルを作成します。 サーレットは、アノテーションを使用してコンポーネントとメタデータを定義します。 そのため、@WebServlet アノテーションを使用して、Java でサーブレット コンポーネントを定義します。

サーブレット アノテーションは、どの URL に対してどの HttpServlet を実行する必要があるかを示す必要があります。 そのために、@WebServlet アノテーションで name および ulrPattern パラメーターを定義しています。 フォームを送信すると、FileUploadServlet クラスが実行される /upload URL にリダイレクトされることに注意してください。

@MultipartConfig アノテーションは、MIME タイプで multipart/form-data を受信することをサーブレットに通知します。

完全なコードを書きましょう。

@WebServlet(name = “FileUploadServlet” , urlPatterns = { “/upload” })
@MultipartConfig
public class FileUploadServlet extends HttpServlet {

プライベート最終静的ロガー LOGGER =
Logger.getLogger(FileUploadServlet.class.getCanonicalName());

protected void processRequest(HttpServletRequest リクエスト、
HttpServletResponse レスポンス)
ServletException、IOException をスローします {
response.setContentType( “text/html;charset=UTF-8” );

final String dest= request.getParameter( “宛先” );
最終パート part = request.getPart( “ファイル” );
最終文字列 nameOfFile = getFileName(part);

OutputStream アウト = null ;
InputStream cont = null ;
最終的な PrintWriter printWriter = response.getWriter();

{を試してください
out = new FileOutputStream( new File(dest + File.separator)
+ nameOfFile));
cont = part.getInputStream();

int リーダー = 0 ;
最終バイト[]バイト=新しいバイト[ 1024 ];

while ((reader = cont.read(bytes)) != -1 ) {
out.write(バイト、 0 、リーダー);
}
printWriter.println( “ファイル “ + nameOfFile + ” は “ + dest に作成されました);
LOGGER.log(Level.INFO, "ファイル{0}が{1}にアップロードされました" ,
new Object[]{nameOfFile, dest});
}キャッチ(FileNotFoundException fne) {
printWriter.println( “ファイル名を言及していないか、または”
+ 「存在しない場所にファイルをアップロードしようとしています」
+ 「場所」。 );
printWriter.println( “<br/> エラー: “ + fne.getMessage());

LOGGER.log(Level.SEVERE, "ファイルのアップロード中にエラーが発生しました。エラー: {0}" ,
new Object[]{fne.getMessage()});
}最後に{
もし(アウト!=ヌル) {
out.close();
}
if (cont != null ) {
cont.close();
}
if (printWriter != null ) {
printWriter.close();
}
}
}

private String getFileName(最終パート part) {
final String partHeader = part.getHeader( “コンテンツ処理” );
LOGGER.log(Level.INFO, "パートヘッダー = {0}" , partHeader);
for (String content : part.getHeader( “content-disposition” ).split( “;” )) {
if (content.trim().startsWith( “ファイル名” )) {
return content.substring(
content.indexOf ( '=' ) + 1 ).trim().replace( “\”” , “” );
}
}
null返します
}
}

processRequestメソッド、リクエストから宛先とファイル部分を取得した後、 getFileNameメソッドを呼び出して、ファイル部分からファイル名を取得します。 その後、このメソッドはFileOutputStreamを作成し、ファイルを目的の場所に転送します。 メソッドのエラー処理部分は、ファイルが見つからないエラーの最も頻繁な原因のいくつかを検出して対処します。

コードをデプロイする

次に、プログラムをビルドして実行する必要があります。 そのために、NetBeans、Eclipse、Intellij Idea などの好みの IDE を使用できます。

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

NetBeans を使用している場合は、Netbeans IDE を開き、作業ディレクトリに移動します。 問題がある場合は、Java の公式ドキュメントを参照してください。 [プロジェクト] タブでフォルダーを右クリックし、[デプロイ] を選択します。 次に、ブラウザにアクセスして、以下の URL を入力します。

http://localhost:8080/{フォルダ名}/

URLを入力してエンターキーを押すと、上記で作成したHTMLページが開きます。 ファイルを目的の場所にアップロードするには、システムを検索してファイルを選択します。 ファイルを保存するフォルダーへのパスを宛先領域に入力します。 ディレクトリは書き込み可能で、システムにすでに存在している必要があります。 宛先フィールドが空の状態でアップロード ボタンをクリックすると、例外が発生します。

アップロード ボタンをクリックすると、サーブレットは POST 要求を受け取り、選択したファイルを指定したフォルダーにコピーします。

アップロード ボタンをクリックした後、指定されたフォルダーにアクセスして、読み込まれたファイル (TextFile.txt など) がそこにあるかどうかを確認できます。

これまで、HTML と Java を使用して単純な Java ファイル アップローダを作成してきました。 ただし、「シンプル」が多くの機能を備えた複雑なアップローダになると、そうでない機能から重要な機能を追跡するのが難しくなる可能性があります。 言うまでもなく、アップローダをゼロから構築することを検討する場合、セキュリティ上の問題がいくつかあります。 したがって、次のセクションでは、安全な Filestack SDK を使用してファイルをアップロードする方法について説明します。

Filestack SDK でファイルを簡単にアップロードする方法

先に進むには、 Filestack API キーが必要です。

開始するには、以下のコマンドを使用して Filestack SDK をインストールします。

実装'com.filestack:filestack-java:0.9.0'

Filestack を使用してアップロード機能を実装するには、Java ファイルで次のコードを使用します。

// クライアントの作成
Config 設定 = new Config( “API_KEY” );
クライアント クライアント =新しいクライアント (構成);

// 設定オプションとアップロード関連のメタデータ
StorageOptions オプション =新しいStorageOptions.Builder()
.mimeType( 「テキスト/プレーン」 )
.filename( "file.txt" )
。建てる();

// 同期アップロードを実行します
FileLink files = client.upload( “/filepath” , false );

// 非同期アップロードを実行します
Flowable<Progress<FileLink>> アップロード = client.uploadAsync( “ファイルパス” , false );
upload.doOnNext( new Consumer<Progress<FileLink>>() {
@オーバーライド
public void accept(Progress<FileLink> progress) throws Exception {
System.out.printf( “%f%% ファイルがアップロードされました\n” , progress.getPercent());
if (progress.getData() != null ) {
FileLink ファイル = progress.getData();
}
}
});

動作していることを確認するために、次のテストを実行できます。

./ファイル テスト

アプリのデプロイを検討している場合、Bintray がデプロイのターゲットになります。 デプロイするには、Filestack 組織に登録されているユーザー アカウントが必要です。 基本的な Filestack リリース ガイドラインにも注意してください。 環境変数「BINTRAY USER」と「BINTRAY API KEY」が必要です。 走る:

エクスポートBINTRAY_USER=
エクスポートBINTRAY_API_KEY=
./files bintrayUpload

結論

独自の Java ファイル アップロード システムを維持および作成するのが難しい場合は、サード パーティのツールを選択することもできます。 データのセキュリティとプライバシーの問題により、医療記録を保持するファイルをアップロードする場合など、サードパーティのシステムを利用することを避ける人がいます。

さらに、ファイル ストレージ インフラストラクチャにアクセスできるユーザーをほとんど制御できないのではないかと心配しています。 ただし、信頼できるファイル アップロード ソリューションを利用することで、フォームおよびドキュメント データのセキュリティを保証することができます。

よくある質問 (FAQ)

API を使用してファイルを移動できますか?

はい。 API を使用したファイルの移動は、市場で入手可能な API ベースのツールを使用して行うことができます。 これは、オンライン プログラムなど、さまざまなプラットフォームで実行されるプログラムと組み合わせることができます。

大きなファイルを REST API に送信できますか?

大きなファイルをアップロードするのは難しい場合があります。帯域幅やネットワーク接続が不十分な場合は特にそうです。 これにより、多数のアップロード エラーが発生する可能性があります。

Javaはアップロードされたファイルをどのように読み取りますか?

入力ストリームを使用して、Java プログラムはバイトまたは文字のコレクションを読み取ります。 ファイルの読み取りは、ファイル オブジェクトの構築から始まり、それを入力ファイルに渡し、ストリームからデータを読み取り、それを処理してから、ストリームとファイル オブジェクトを閉じる一連の操作です。

ファイルアップロードツールとは?

これは、Web アプリケーションに接続できる API またはプラグインであり、ユーザーが写真、ビデオ、およびテキスト ファイルをアップロードできるようにするだけでなく、いくつかの基本的な変更、フィルター効果などを可能にします。