Java编程语言-文件上传

简介:在Java编程中,文件上传分为本地存储或云存储,这篇帖子小编将说明且用实例验证这两种文件上传的优缺点。

文件上传定义

  1. 文件上传,是指将本地的图片、视频、音频等文件上传到服务器,供其他用户浏览或者下载。
  2. 文件上传在项目中应用非常广泛,我们经常发微博、发微信朋友圈都用到了文件上传功能。

文件上传目录

前端页面

文件上传需要前端页面的三要素:

  1. 前端页面的输入框: type 为 file
  2. 编码格式:enctype=“multipart/form-data”
  3. 提交方法:method=“post”
    下面是前端页面代码(在IDEA项目中的static目录下)
<!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="text" name="username"><br>
        年龄: <input type="text" name="age"><br>
        头像: <input type="file" name="image"><br>
        <input type="submit" value="提交">
    </form>

</body>
</html>
<!--enctype="multipart/form-data-->

后端程序

后端程序只需要编写相对应的请求响应类,就能接收前端页面发来的数据,并且返回响应。
下面是后端程序对应的控制器类(在IDEA项目中),在下图的代码中用到了一个新的API,“MultipartFile image”,表达的意思是创建一个image变量,它是MultipartFile 类型(小编是这样说的,方便各位理解),它可以接受音频、视频、文件等数据格式。

package com.itheima.tliaswebmanagement.controller;

import com.itheima.tliaswebmanagement.pojo.Result;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.multipart.MultipartFile;

@Slf4j
@RestController
@RequestMapping("/upload")
public class UploadController {

    @PostMapping
    public Result upload(String username, Integer age, @RequestParam("image") MultipartFile image){

        log.info("文件上传: {}, {}, {}", username, age, image);
        return  Result.success();
    }
}

文件存储

文件在上传到项目中后,会自动产生的要存储文件的对应的临时文件,当确认到存储后,临时文件会自动消失。这里文件的存储有两种,分别是:本地存储、云存储

本地存储

在服务器端,接收到上传来的文件之后,将文件存储在本地服务器磁盘中,在存储时有两件事情要注意。
其一:就是要对每一个用户上传的文件进行新命名,这样才能保证不会出现上传文件重名出现的覆盖现象。(解决方案如下)

package com.itheima.tliaswebmanagement.controller;

import com.itheima.tliaswebmanagement.pojo.Result;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.multipart.MultipartFile;

import java.io.File;
import java.io.IOException;
import java.util.UUID;

@Slf4j
@RestController
@RequestMapping("/upload")
public class UploadController {

    @PostMapping
    public Result upload(String username, Integer age, @RequestParam("image") MultipartFile image) throws Exception {
        log.info("文件上传: {}, {}, {}", username, age, image);
        // 获取原始文件名
        String originalFilename = image.getOriginalFilename();
        // 构建唯一的文件名称,防止新用户在上传文件的时候因为文件名重复,将老用户的文件覆盖掉
        String uuid = UUID.randomUUID().toString();
        int lastIndexOf = originalFilename.lastIndexOf(".");
        String substring = originalFilename.substring(lastIndexOf);
        String newFileName = uuid + substring;

        // 将要上传的文件存储到指定位置,有异常产生,直接抛出。
        image.transferTo(new File("D:\\temp\\" + newFileName));
        return  Result.success();
    }
}

其二:就是修改上传文件大小限制,因为默认上传文件的大小为1M,但是实际情况中上传的文件大小不止1M,而且数量也不能确定。(解决方案如下)

#驱动类名称
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
#数据库连接的url
spring.datasource.url=jdbc:mysql://localhost:3306/tlias
#连接数据库的用户名
spring.datasource.username=root
#连接数据库的密码
spring.datasource.password=qwer1234

#配置mybatis的日志, 指定输出到控制台
mybatis.configuration.log-impl=org.apache.ibatis.logging.stdout.StdOutImpl

#开启mybatis的驼峰命名自动映射开关 a_column ------> aCloumn
mybatis.configuration.map-underscore-to-camel-case=true

#配置单个文件上传-文件最大容量  (开发者根据实际需求自己定义)
spring.servlet.multipart.max-file-size=10MB

#配置单个文件上传-文件最大容量 (一次请求,上传多个文件)(开发者根据实际需求自己定义)
spring.servlet.multipart.max-request-size=100MB

点评:本地存储的缺点很明显:1.存储在服务器磁盘中,前端页面无法直接访问。 2.服务器磁盘容量有限,扩容麻烦。 3.一单磁盘出现问题,项目将失效。

云存储

阿里云是阿里巴巴集团旗下全球领先的云计算公司,也是国内最大的云服务提供商,小编这边也是阿里云作为云存储讲解的。
使用第三方服务的通用思路
如果读者是新用户,那你们需要先注册登录、实名认证和开通OSS服务的,具体操作流程,我这边给出一个PDF文档,读者自行点击下载(OSS服务—PDF文档

在这里小编认为读者应该已经在阿里云官网找到了这个页面(如下图),按照图片所标记的顺序点击下去
在这里插入图片描述
之后按照下图执行下去。
在这里插入图片描述
因为我们是要上传文件,所以接下来我们点击Java上传文件,之后在这个代码中进行修改一些配置(代码中有详细的解释说明,这里不再叙述)。
在这里插入图片描述

总结

以上就是Java文件上传的全部内容了,若有什么不足之处,欢迎各位大佬斧正。
如果看官们觉得不错的话,请给个留言、点赞或者关注,你的支持就是我最大的动力。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值