JavaWeb〜簡単なファイルアップロードプロセス


ここでは、主にこのファイルアップロードのインタラクティブなプロセスに精通するために、簡単な画像アップロード機能が実装されています。大きなファイルのスライスアップロード、ブレークポイントからのアップロードの再開など、より複雑なファイルアップロードについては、ここではあまり紹介しません。

フロントエンドアップロードファイル

まずフロントエンドにページを作成します。ここでは、フォームの形式でファイルをアップロードすることを選択します。選択するときinputは、タグのタイプを使用してfile、ローカルファイルを自動的に選択します。

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>上传一张图片</title>
</head>
<body>
<form action="upload" method="POST" enctype="multipart/form-data">
    <input type="file" name="MyImage">
    <input type="submit" value="提交图片">
</form>
</body>
</html>

コードの説明

  • フォームタグでactionは、フォームデータアップロードのURLアドレスが属性の後に書き込まれます。書き込まれない場合、デフォルトで現在のページにアップロードされます。ここでは、サーバー@WebServlet(" /upload"によって解析されたアドレスを書き込みます。 )。
  • method属性では、前述のHTTPリクエストの作成方法であるフォームデータの送信方法であるPOSTメソッドとして設定しており、POSTで送信されるデータ量が多く、無制限と見なされます。
  • enctype = "multipart / form-data"、この属性の機能は、フォームデータのエンコード形式をmultipart/form-dataタイプとして設定することです。このエンコードタイプは、アップロード時にファイルコンテンツを処理し、サーバーがファイルタイプとコンテンツを解析できるようにします。

enctype属性:
application / x-www = form-urlencoded:デフォルトでは、フォームフィールドの値属性値のみが処理され、フォームフィールドの値がURLエンコードメソッドに処理されます
。multipart/ form-data:フォームバイナリストリームの形式で処理されますデータは、フォームフィールドの値属性値に加えて、フォームフィールドのファイルコンテンツも処理し、リクエストパラメータにカプセル化し、文字をエンコードしません。text
/ plain:スペースを+記号に変換します。他の文字はエンコードされないプロセスであり、フォームを介してメールを送信するのに適しています。

まとめ

  • フロントエンドのファイルアップロードは、実際にはファイルのコンテンツとデータの転送であり、私たちが一般的に使用するファイルのコピーおよびコピー操作ではありません。
  • 送信の過程で、伝統的な漢方薬はデータ送信のルールを策定するようにコード化されているため、バックエンドは解析に対応する一連の解析ルールを実装できます。
  • 渡されるデータルールには、ファイル名やファイルタイプなどのファイルの基本情報が含まれている必要があります。これにより、バックエンドの解析でファイルを正しい形式で書き込むことができます。

バックエンドはファイルを受け入れます

リクエストはサーバー側で処理され、リクエスト内のファイルが取り出されて再度保存され、最後にコードがTomcatにデプロイされます。

リクエスト内のファイルを解析するときはgetPart、サーブレットのメソッドを使用する必要があります。このメソッドのパラメータは、対応するファイル名です。name

フロントエンドでファイルをアップロードする場合、一度にアップロードする複数のファイルを選択すると、各ファイルがPartオブジェクトにパッケージ化されます。各ファイルには独自のファイル名があり、サーバーはファイルに従って対応するファイルを見つけることができます。 name。PartPart対応するファイル情報が含まれています。

import javax.servlet.ServletException;
import javax.servlet.annotation.MultipartConfig;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.Part;
import java.io.IOException;


@MultipartConfig
@WebServlet("/upload")
public class UploadServlet extends HttpServlet {
    
    
    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
    
    
        //1.从请求对象中,读取出Part对象
        Part part =req.getPart("MyImage");
        //2.读取到Part 对象中的一些参数
        System.out.println(part.getSubmittedFileName()); // 上传文件真实的文件名
        System.out.println(part.getContentType()); // 文件的类型
        System.out.println(part.getSize()); // 文件的大小

        //3.把文件写入到指定的目录中
        part.write("c:/temp/MyImage.jpg");
        //4.返回一个响应,通知用户上传成功
        resp.getWriter().write("upload OK !");
    }
}

コードの説明:

  • ファイルのアップロードを受け入れるサーブレットには注釈を付ける必要があります。@MultipartConfig注釈を付けると、サーブレットはリクエストのファイルコンテンツを正しく読み取ることができません。
  • ここでの@WebServlet( "/ upload")/uploadは、フロントエンドフォームタグのaction属性の値にupload対応します。action属性は、フォーム内のデータを対応するURLに送信します。フロントエンドはアップロードするURLを設定するため、URLを作成するときにバックエンドもフロントエンドに対応している必要があります。そうしないと、Tomcatにアクセスできません。
  • サーブレットで書き換えられた特定のメソッドもmethodフロントエンド属性に対応している必要があります。フロントエンドはPostメソッドを使用し、サーブレットでのバックエンドの書き換えはdoPostメソッドです。
  • オーバーライドされたメソッドでは、最初にファイル名からname対応するPartオブジェクトを取得する必要があります。フロントエンドファイル名はMyImageであるため、ここでのパラメーターはMyImageである必要があります。
  • オブジェクトが取得された後、ファイル名、ファイルタイプ、ファイルサイズなどのファイルのパラメータ情報は、サーブレットのいくつかの組み込みメソッドを介して取得できます。
  • 次にpart.write()、メソッドによってファイルを永続化します。つまり、ファイルを保存して、指定されたディレクトリに書き込みます。このメソッドのパラメータは、保存するパスです
  • 最後に、アップロードが成功したことをクライアントに通知するための応答を返すことができます。

ブラウザにURLを入力し、リクエストを送信して、ファイルのアップロードを開始します
ここに画像の説明を挿入
アップロードが成功しまし
ここに画像の説明を挿入
たローカルの対応するパスで、アップロードされたファイルを確認できます
ここに画像の説明を挿入

おすすめ

転載: blog.csdn.net/Merciful_Lion/article/details/123616307