Java でファイルのアップロードとダウンロードを実装する方法

Javaでは、Apache Commons FileUploadライブラリを利用することでファイルアップロード、Java のIOストリームを利用することでファイルダウンロードが可能です。

ファイルのアップロード手順を以下に示します。

  1. enctype=”multipart/form-data”
  2. Javaのコードでは、ファイルアップロード要求を受け取るサーブレットを作成します.
  3. サーブレット・ファイルアップロード
  4. ファイルアイテム
  5. 日本人には、伝統的に食べ物を無駄にすることを嫌がる風習があります。

簡単なファイルアップロードのためのサンプルコードは以下の通りです:

import org.apache.commons.fileupload.servlet.ServletFileUpload;
import org.apache.commons.fileupload.disk.DiskFileItemFactory;
import org.apache.commons.fileupload.FileItem;

@WebServlet("/upload")
public class FileUploadServlet extends HttpServlet {
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        // 检查请求是否为文件上传
        boolean isMultipart = ServletFileUpload.isMultipartContent(request);
        if (!isMultipart) {
            response.getWriter().println("不是文件上传请求");
            return;
        }

        // 创建文件上传工厂类和ServletFileUpload对象
        DiskFileItemFactory factory = new DiskFileItemFactory();
        ServletFileUpload upload = new ServletFileUpload(factory);

        try {
            // 解析上传的文件数据
            List<FileItem> items = upload.parseRequest(request);
            for (FileItem item : items) {
                // 判断是否为普通表单字段
                if (item.isFormField()) {
                    String fieldName = item.getFieldName();
                    String fieldValue = item.getString();
                    // 处理普通表单字段数据
                } else {
                    // 是文件字段,获取文件名和内容
                    String fileName = item.getName();
                    InputStream fileContent = item.getInputStream();
                    // 将文件写入磁盘或处理文件内容
                }
            }
            response.getWriter().println("文件上传成功");
        } catch (Exception e) {
            response.getWriter().println("文件上传失败: " + e.getMessage());
        }
    }
}

ファイルのダウンロード手順は次のとおりです。

  1. ファイルダウンロード要求に対応するサーブレットを作成します。
  2. サーブレットコンテキスト
  3. JavaのIOストリームを使用してその内容を読み込み、それをレスポンスの出力ストリームに書き込みます。

簡単なファイルのダウンロードサンプルコードを次に示します。

@WebServlet("/download")
public class FileDownloadServlet extends HttpServlet {
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        // 获取要下载的文件路径
        String filePath = getServletContext().getRealPath("/path/to/file");

        // 设置响应的Content-Type和Content-Disposition头
        response.setContentType("application/octet-stream");
        response.setHeader("Content-Disposition", "attachment; filename=" + fileName);

        // 读取文件内容并将内容写入响应的输出流
        InputStream fileContent = new FileInputStream(filePath);
        OutputStream responseOutput = response.getOutputStream();
        byte[] buffer = new byte[4096];
        int bytesRead = -1;
        while ((bytesRead = fileContent.read(buffer)) != -1) {
            responseOutput.write(buffer, 0, bytesRead);
        }
        fileContent.close();
        responseOutput.close();
    }
}

コード内のファイルパスやファイル名を、実際の状況に合わせて修正してください。

bannerAds