两种java文件上传实例讲解

下面是详细讲解“两种java文件上传实例讲解”的攻略:

一、基于Spring MVC框架的文件上传实例

1. 在Maven项目配置中添加以下依赖:

<dependency>
  <groupId>org.springframework</groupId>
  <artifactId>spring-webmvc</artifactId>
  <version>4.3.1.RELEASE</version>
</dependency>

<dependency>
  <groupId>commons-fileupload</groupId>
  <artifactId>commons-fileupload</artifactId>
  <version>1.3.1</version>
</dependency>

<dependency>
  <groupId>commons-io</groupId>
  <artifactId>commons-io</artifactId>
  <version>2.5</version>
</dependency>

2. 配置Spring MVC配置文件

在spring配置文件中,添加multipartResolver Bean,用来处理文件上传的请求。

<bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
  <property name="maxUploadSize" value="50000000"/>
</bean>

3. 编写Controller类

@Controller
public class UploadFileController {
  @RequestMapping(value="/uploadFile", method=RequestMethod.POST)
  public String uploadFileHandler(@RequestParam("file") MultipartFile file) {

    if (!file.isEmpty()) {
      try {
          byte[] bytes = file.getBytes();

          // 创建文件保存路径
          String path = "/tmp/" + file.getOriginalFilename();
          File serverFile = new File(path);
          BufferedOutputStream stream = new BufferedOutputStream(
                  new FileOutputStream(serverFile));
          stream.write(bytes);
          stream.close();

          System.out.println("You have successfully uploaded " + file.getOriginalFilename());
      } catch (Exception e) {
          System.out.println("You failed to upload " + file.getOriginalFilename() + " => " + e.getMessage());
      }
    } else {
        System.out.println("You failed to upload " + file.getOriginalFilename() + " because the file was empty.");
    }
    return "uploadFileSuccessView";
  }
}

4. 编写前端页面

<form method="post" enctype="multipart/form-data" action="/SpringMVCExample/uploadFile">
  <input type="file" name="file">
  <input type="submit" value="上传">
</form>

二、不依赖框架的文件上传实例

1. 前端页面

<form enctype="multipart/form-data" method="post" action="UploadServlet">
  <input type="file" name="fileToUpload" id="fileToUpload">
  <br>
  <input type="submit" value="Upload">
</form>

2. 服务器端Java代码

@WebServlet("/UploadServlet")
@MultipartConfig(fileSizeThreshold = 1024 * 1024 * 2, // 2MB
                 maxFileSize = 1024 * 1024 * 10, // 10MB
                 maxRequestSize = 1024 * 1024 * 50) // 50MB
public class UploadServlet extends HttpServlet {
  private static final long serialVersionUID = 1L;

  protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    InputStream inputStream = null;
    OutputStream outputStream = null;
    PrintWriter out = response.getWriter();

    try {
      Part filePart = request.getPart("file");
      inputStream = filePart.getInputStream();

      File file = new File("C:/uploads/" + filePart.getSubmittedFileName());
      outputStream = new FileOutputStream(file);

      int read = 0;
      final byte[] bytes = new byte[1024];

      while ((read = inputStream.read(bytes)) != -1) {
        outputStream.write(bytes, 0, read);
      }
      System.out.println("New file " + file.getName() + " created at " + file.getAbsolutePath());
      out.println("Received file=" + file.getName());
    } catch (Exception e) {
      out.println("Error=" + e.getMessage());
    } finally {
      if (inputStream != null) inputStream.close();
      if (outputStream != null) outputStream.close();
      if (out != null) out.close();
    }
  }
}

这是两种Java文件上传的实例,总体来说,使用Spring MVC框架上传文件更为简便,而不依赖框架的上传方式更为灵活,可以在任何Java Web项目中使用。我们可以根据实际需求,选择合适的文件上传方式。

阅读剩余 63%

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:两种java文件上传实例讲解 - Python技术站

(0)
上一篇 2023年5月19日
下一篇 2023年5月19日

相关文章

  • Java线程池中多余的线程是如何回收的

    Java线程池可以有效控制线程的数量,提高程序的性能和资源利用率。但是在使用线程池的过程中,我们需要考虑线程池中多余的线程是如何回收的。下面我将从线程池的工作原理、线程池中的线程回收机制两个方面讲解这个问题。 线程池的工作原理 线程池在创建时会预先分配一定数量的线程。当用户提交任务时,线程池就会将任务分配给其中的一个空闲线程执行。如果线程池中没有空闲的线程,…

    Java 2023年5月19日
    00
  • MyBatis传入多个参数时parameterType的写法

    MyBatis是一个Java持久层ORM框架,支持多种数据库,本质上是将SQL语句映射成Java方法调用,将Java对象映射成数据库中的记录。在使用MyBatis进行开发时,我们需要经常传入多个参数,来完成复杂的查询、插入、更新、删除等操作。这就需要我们正确设置parameterType参数来保证程序的正常运行。 1.传入多个参数时parameterType…

    Java 2023年5月20日
    00
  • JSP使用过滤器防止SQL注入的简单实现

    下面我会详细讲解“JSP使用过滤器防止SQL注入的简单实现”的完整攻略。 1. 什么是SQL注入 SQL注入攻击是指攻击者通过在应用程序的输入参数中插入恶意的SQL语句,从而达到欺骗后端数据库服务器执行恶意SQL语句的目的。SQL注入攻击的攻击方式千变万化,最终目的都是为了绕过后端应用程序的验证机制,获得非法的访问权限,甚至掌控整个后端服务器。 2. 如何使…

    Java 2023年6月15日
    00
  • Java swing 图像处理多种效果实现教程

    Java Swing是Java编程语言专为创建GUI(图形用户界面)设计的一种界面工具包。在Java Swing中,可以使用其图像处理功能实现许多效果。下面是“Java Swing图像处理多种效果实现教程”的完整攻略。 1. 导入Java Swing库 在Java项目文件中,需要导入Java Swing库以便使用其图像处理功能。可以在代码中写入以下代码: i…

    Java 2023年5月26日
    00
  • 使用Java构造和解析Json数据的两种方法(详解一)

    使用Java构造和解析JSON数据的两种方法有:使用Java的JSONObject和JSONArray类和使用第三方库Gson。 使用Java的JSONObject和JSONArray类 在使用该方法前,需要先导入JSON库,例如org.json库。 构造JSON数据 使用JSONObject和JSONArray类可以方便地构造JSON数据。JSONObje…

    Java 2023年5月26日
    00
  • 基于Java实现计数排序,桶排序和基数排序

    基于Java实现计数排序、桶排序和基数排序 计数排序(Counting Sort) 计数排序是一种稳定的排序算法,它使用一个计数数组来记录每个元素出现的次数,并按照次数将元素依次输出到结果数组中。 步骤 初始化一个大小为 max_value 的空计数数组 遍历待排序数组,将每个元素出现的次数加入计数数组对应下标中 遍历计数数组,累加每个元素之前出现的次数,得…

    Java 2023年5月19日
    00
  • idea maven 经常主目录自动变回默认的解决方法

    我来为您详细讲解如何解决“idea maven 经常主目录自动变回默认”的问题。 问题描述 在使用 IDEA 开发过程中,我们通常会使用 Maven 进行项目构建和管理。然而,有的时候我们会发现 IDEA 的 Maven 主目录经常会自动变回默认值,并且有时修改也无法生效,这会给我们带来一定的困扰。 解决方法 方法一:修改配置文件 第一种解决方法较为简单,我…

    Java 2023年5月19日
    00
  • Java构建JDBC应用程序的实例操作

    Java构建JDBC应用程序的实例操作涉及到以下步骤: 导入JDBC驱动 在Java应用程序中连接数据库前,需要导入相应的JDBC驱动,可以通过Class.forName()方法实现。 示例代码: Class.forName("com.mysql.jdbc.Driver"); 创建连接 在导入驱动后,应用程序需要创建一个数据库连接,可以通…

    Java 2023年5月30日
    00
合作推广
合作推广
分享本页
返回顶部