Java中实现文件上传
创始人
2024-11-13 07:09:24
0次

目录

1、文件上传本地

1.1 原理

1.2 如何使用文件上传

1.2.1 引入文件上传的依赖

 1.2.2 配置文件上传拦截器

 1.2.3 完成文件上传的代码

2、文件上传oss服务器 

2.1 为什么需要上传到oss服务器

2.2 如何使用oss 

2.2.1 开启oss服务

 2.2.2 在Java中引入依赖

2.2.3 查看自己ID和密钥

2.2.4 代码

3、案例

3.1 引入相关依赖 

3.2  创建实体类

3.3 创建controller层

3.3.1 创建StudentController

3.3.2 创建UploadController

3.4 创建dao层

3.4.1 BaseDao

3.4.2 StudentDao

3.5 配置SpringMvc配置文件

3.6 编写upload.jsp文件


1、文件上传本地

1.1 原理

1.2 如何使用文件上传

1.2.1 引入文件上传的依赖

                       org.springframework             spring-webmvc             5.2.10.RELEASE                               org.projectlombok             lombok             1.18.24                                        javax.servlet             javax.servlet-api             3.1.0                                        com.fasterxml.jackson.core             jackson-databind             2.13.3                                        commons-fileupload             commons-fileupload             1.4              

 1.2.2 配置文件上传拦截器

                                                   

 1.2.3 完成文件上传的代码

 <%--表单: 提交方式必须为post   enctype编码:multipart/form-data文件编码--%>    
<%--input必须设置文件文件框 而且必须起名称--%> 选择上传的文件:
@Controller public class UploadController {      /**      *      * @param myfile 接受你上传的文件对象信息封装到该类。该类中可以获取上传文件的信息。比如:文件名 文件大小 文件后缀等      *               这个名称必须为文件上传表单的文件框的名称一致      * @return      */    @PostMapping("/upload")     public String upload(MultipartFile myfile, HttpServletRequest request) throws IOException {         //获取tomcat上下文中的指定目录的路径         String realPath = request.getSession().getServletContext().getRealPath("/upload");         //根据上面的路径创建一个文件对象         File file=new File(realPath);         //如果没有该目录则创建         if (!file.exists()) {             file.mkdirs();         }         //把上传的文件转移到upload目录下--重名覆盖了         String uuid = UUID.randomUUID().toString().replace("-", "");         File target=new File(realPath+"/"+(uuid+myfile.getOriginalFilename()));         myfile.transferTo(target);         return "success";     } }

2、文件上传oss服务器 

2.1 为什么需要上传到oss服务器

  1. 如果项目搭建了集群。那么导致文件数据无法共享。

  2. 如果项目的target删除了。导致文件数据丢失。

2.2 如何使用oss 

2.2.1 开启oss服务

oss服务器网址

点击上面链接,跳转到阿里云的oss服务器页面,完成登录后,会进入oss管理控制台,如图所示

 然后点击创建Bucket,操作如下图

 2.2.2 在Java中引入依赖

     com.aliyun.oss     aliyun-sdk-oss     3.15.1 

2.2.3 查看自己ID和密钥

2.2.4 代码

@PostMapping("/upload2")     public String upload2(MultipartFile myfile){         // Endpoint以华东1(杭州)为例,其它Region请按实际情况填写。         String endpoint = "oss-cn-beijing.aliyuncs.com";         // 填写Bucket名称,例如examplebucket。         String bucketName = "XXXXX";         //上传到oss后的名字         String objectName = UUID.randomUUID().toString().replace("-","")+myfile.getOriginalFilename();         // 创建OSSClient实例。         /**          * String endpoint,自己的endpoint          * String accessKeyId, 自己的id          * String secretAccessKey自己的密钥          */         String accessKeyId="XXXXXXX";         String secretAccessKey="XXXXXXX";         OSS ossClient = new OSSClientBuilder().build(endpoint,accessKeyId,secretAccessKey);          try {             InputStream inputStream = myfile.getInputStream();             // 创建PutObjectRequest对象。             PutObjectRequest putObjectRequest = new PutObjectRequest(bucketName, objectName, inputStream);             // 创建PutObject请求。             PutObjectResult result = ossClient.putObject(putObjectRequest);         } catch (Exception oe) {         }          finally {             if (ossClient != null) {                 ossClient.shutdown();             }         }         return "success";     }

3、案例

springmvc+jdbc+elementui+vue

添加和展示所有的功能

3.1 引入相关依赖 

     4.0.0    com.ykq   qy174-springmvc04   1.0-SNAPSHOT   war                org.springframework       spring-webmvc       5.2.10.RELEASE                 org.projectlombok       lombok       1.18.24                      javax.servlet       javax.servlet-api       3.1.0                      com.fasterxml.jackson.core       jackson-databind       2.13.3                      commons-fileupload       commons-fileupload       1.4                      com.aliyun.oss       aliyun-sdk-oss       3.15.1                      mysql       mysql-connector-java       8.0.28                      com.alibaba       druid       1.2.8         

3.2  创建实体类

@Data public class Student implements Serializable {         private Integer id;      private String name;      private String phone;      private String email;      private Integer age;      private Byte gender;      private Date createtime;      private String head;  }

3.3 创建controller层

3.3.1 创建StudentController

@Controller @RequestMapping("/student") public class StudentController {     private StudentDao studentDao=new StudentDao();      @GetMapping("/list")     @ResponseBody //把java对象转化为json字符串     public List list(){         List list = studentDao.findAll();         return list;     }      @PostMapping("/add")     @ResponseBody //把java对象转化为json字符串     public int add(@RequestBody Student student){         int add = studentDao.add(student.getName(), student.getPhone(), student.getEmail(), student.getAge(), student.getGender(), student.getHead());         return add;     } }

3.3.2 创建UploadController

@Controller public class UploadController {      /**      *      * @param myfile 接受你上传的文件对象信息封装到该类。该类中可以获取上传文件的信息。比如:文件名 文件大小 文件后缀等      *               这个名称必须为文件上传表单的文件框的名称一致      * @return      */     @PostMapping("/upload")     public String upload(MultipartFile myfile, HttpServletRequest request) throws IOException {         //获取tomcat上下文中的指定目录的路径         String realPath = request.getSession().getServletContext().getRealPath("/upload");         //根据上面的路径创建一个文件对象         File file=new File(realPath);         //如果没有该目录则创建         if (!file.exists()) {             file.mkdirs();         }         //把上传的文件转移到upload目录下--重名覆盖了         String uuid = UUID.randomUUID().toString().replace("-", "");         File target=new File(realPath+"/"+(uuid+myfile.getOriginalFilename()));         myfile.transferTo(target);         return "success";     }      @PostMapping("/upload2")     @ResponseBody     public String upload2(MultipartFile file){         // Endpoint以华东1(杭州)为例,其它Region请按实际情况填写。         String endpoint = "oss-cn-beijing.aliyuncs.com";         // 填写Bucket名称,例如examplebucket。         String bucketName = "qy174-8888";         //上传到oss后的名字         String objectName = UUID.randomUUID().toString().replace("-","")+file.getOriginalFilename();         // 创建OSSClient实例。         /**          * String endpoint,自己的endpoint          * String accessKeyId, 自己的id          * String secretAccessKey自己的密钥          * XX          * XXX          */         String accessKeyId="XXX";         String secretAccessKey="XXX";         OSS ossClient = new OSSClientBuilder().build(endpoint,accessKeyId,secretAccessKey);          try {             InputStream inputStream = file.getInputStream();             // 创建PutObjectRequest对象。             PutObjectRequest putObjectRequest = new PutObjectRequest(bucketName, objectName, inputStream);             // 创建PutObject请求。             PutObjectResult result = ossClient.putObject(putObjectRequest);             String path="https://"+bucketName+"."+endpoint+"/"+objectName;             return path;         } catch (Exception oe) {         }          finally {             if (ossClient != null) {                 ossClient.shutdown();             }         }         return "失败";     } } 

3.4 创建dao层

3.4.1 BaseDao

public class BaseDao {     protected Connection conn;     protected PreparedStatement ps;     protected ResultSet rs;     //数据源对象     private static DataSource dataSource;      //静态代码块中     static {         try {             //创建一个属性对象             Properties properties = new Properties();             //加载属性文件             InputStream inputStream = BaseDao.class.getClassLoader().getResourceAsStream("db.properties");             properties.load(inputStream);             //获取连接池对象             dataSource = DruidDataSourceFactory.createDataSource(properties);         } catch (Exception e) {             e.printStackTrace();         }     }     //获取连接对象     public void getConn() throws Exception{         conn = dataSource.getConnection();     }     //关闭资源     public void closeAll(){          if(rs!=null){              try {                  rs.close();              } catch (SQLException throwables) {                  throwables.printStackTrace();              }          }          if(ps!=null){              try {                  ps.close();              } catch (SQLException throwables) {                  throwables.printStackTrace();              }          }          if(conn!=null){              try {                  conn.close();              } catch (SQLException throwables) {                  throwables.printStackTrace();              }          }     }      //通用的增删改方法     public int edit(String sql,Object...params){         try {             getConn();             ps=conn.prepareStatement(sql);             //为占位符赋值             for(int i=0;i

3.4.2 StudentDao

public class StudentDao extends BaseDao {     //求总条数 select count(*) from t_student     public int getCount(){         try {             getConn();             String sql="select count(*) as c from t_student";             ps=conn.prepareStatement(sql);             rs=ps.executeQuery();             while (rs.next()){                 int c = rs.getInt("c");                 return c;             }         } catch (Exception e) {             e.printStackTrace();         } finally {             closeAll();         }         return 0;     }      //查询所有学员信息--单元测试     public List findAll(){         List list=new ArrayList();         try {             getConn();             String sql="select * from t_student";             ps=conn.prepareStatement(sql);             rs=ps.executeQuery();             while (rs.next()){                 Student s=new Student();                 s.setId(rs.getInt("id"));                 s.setPhone(rs.getString("phone"));                 s.setEmail(rs.getString("email"));                 s.setAge(rs.getInt("age"));                 s.setName(rs.getString("name"));                 s.setCreatetime(rs.getDate("createtime"));                 s.setGender(rs.getByte("gender"));                 s.setHead(rs.getString("head"));                 list.add(s);             }         } catch (Exception e) {             e.printStackTrace();         } finally {             closeAll();         }         return list;     }     //根据id查询学员信息     public Student findById(String id){         Student s=null;         try {             getConn();             String sql="select * from t_student where id=?";             ps=conn.prepareStatement(sql);             ps.setObject(1,id);             rs=ps.executeQuery();             while (rs.next()){                 s=new Student();                 s.setId(rs.getInt("id"));                 s.setPhone(rs.getString("phone"));                 s.setEmail(rs.getString("email"));                 s.setAge(rs.getInt("age"));                 s.setName(rs.getString("name"));                 s.setCreatetime(rs.getDate("createtime"));                 s.setGender(rs.getByte("gender"));                 s.setHead(rs.getString("head"));              }         } catch (Exception e) {             e.printStackTrace();         } finally {             closeAll();         }         return s;     }     //添加方法     public int add(String name,String phone,String email,int age,int gender,String head){         String sql="insert into t_student(id,name,phone,email,age,createtime,gender,head) values(null,?,?,?,?,now(),?,?)";         return edit(sql,name,phone,email,age,gender,head);     }      //修改     public int update(String id,String name,String phone,String email,int age,int gender){         String sql="update t_student set name=?,phone=?,email=?,age=?,gender=?,createtime=now() where id=?";         return edit(sql,name,phone,email,age,gender,id);     }     //删除方法     public int delete(String id){         String sql="delete from t_student where id=?";         return edit(sql,id);     }

3.5 配置SpringMvc配置文件

                                                                                                                          

3.6 编写upload.jsp文件

<%@ page contentType="text/html;charset=UTF-8" language="java" %>       Title      <%--表单: 提交方式必须为post   enctype编码:multipart/form-data文件编码--%>    
<%--input必须设置文件文件框 而且必须起名称--%> 选择上传的文件:

相关内容

热门资讯

玩家爆料开挂app!丹东约战麻... 玩家爆料开挂app!丹东约战麻将多功能开挂app,丹东约战麻将果然真的有开挂app1、下载好丹东约战...
终于清楚辅助软件!丰城棋牌多功... 终于清楚辅助软件!丰城棋牌多功能辅助软件,丰城棋牌本来是真的有辅助软件1、起透看视 丰城棋牌辅助软件...
重大消息透视器方法!科尔沁麻将... 重大消息透视器方法!科尔沁麻将多功能透视器方法,科尔沁麻将本来是有透视器方法科尔沁麻将脚本下载中分为...
分享个大家辅助方法!天津麻将多... 分享个大家辅助方法!天津麻将多功能辅助方法,天津麻将竟然是真的有辅助方法1、很好的工具软件,可以解锁...
带你了解外挂攻略!逍遥皖北棋牌... 带你了解外挂攻略!逍遥皖北棋牌多功能外挂攻略,逍遥皖北棋牌总是是有外挂攻略1、在逍遥皖北棋牌插件功能...
热门推荐透视挂攻略!悠乐汇多功... 热门推荐透视挂攻略!悠乐汇多功能透视挂攻略,悠乐汇切实真的有透视挂攻略;1、全新机制【悠乐汇ai辅助...
推荐一款辅助方法!科尔沁麻将多... 推荐一款辅助方法!科尔沁麻将多功能辅助方法,科尔沁麻将其实真的有辅助方法1、不需要AI权限,帮助你快...
重大来袭开挂攻略!一乐浙江多功... 重大来袭开挂攻略!一乐浙江多功能开挂攻略,一乐浙江一贯是真的有开挂攻略1、让任何用户在无需一乐浙江安...
详细说明作弊器技巧!启东麻将多... 详细说明作弊器技巧!启东麻将多功能作弊器技巧,启东麻将一贯存在有作弊器技巧1、下载好启东麻将透视辅助...
玩家必看科普辅助插件!闲来互娱... 玩家必看科普辅助插件!闲来互娱多功能辅助插件,闲来互娱一贯有辅助插件1、很好的工具软件,可以解锁游戏...