Java中实现文件上传

news2024/11/15 8:39:55

目录

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 引入文件上传的依赖

 <dependencies>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-webmvc</artifactId>
            <version>5.2.10.RELEASE</version>
        </dependency>
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <version>1.18.24</version>
        </dependency>
        <!--servlet依赖-->
        <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>javax.servlet-api</artifactId>
            <version>3.1.0</version>
        </dependency>
        <!--jackson依赖:把controller层方法返回的java对象转化为json字符串-->
        <dependency>
            <groupId>com.fasterxml.jackson.core</groupId>
            <artifactId>jackson-databind</artifactId>
            <version>2.13.3</version>
        </dependency>
        <!--文件上传依赖-->
        <dependency>
            <groupId>commons-fileupload</groupId>
            <artifactId>commons-fileupload</artifactId>
            <version>1.4</version>
        </dependency>
    </dependencies>

 1.2.2 配置文件上传拦截器

    <!--文件上传解析器 id:必须为multipartResolver-->
    <bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
        <!--设置文件上传的大小 单位为byte字节 1M=1024kb=1024b  10*1024*1024-->
        <property name="maxUploadSize" value="10485760"/>
        <!--设置编码-->
        <property name="defaultEncoding" value="utf-8"/>
    </bean>

 1.2.3 完成文件上传的代码

 <%--表单: 提交方式必须为post   enctype编码:multipart/form-data文件编码--%>
   <form method="post" action="/upload" enctype="multipart/form-data">
       <%--input必须设置文件文件框 而且必须起名称--%>
       选择上传的文件:<input type="file" name="myfile"/><br>
       <input type="submit" value="上传"/>
   </form>
@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中引入依赖

<dependency>
    <groupId>com.aliyun.oss</groupId>
    <artifactId>aliyun-sdk-oss</artifactId>
    <version>3.15.1</version>
</dependency>

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 引入相关依赖 

<?xml version="1.0" encoding="UTF-8"?>

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>

  <groupId>com.ykq</groupId>
  <artifactId>qy174-springmvc04</artifactId>
  <version>1.0-SNAPSHOT</version>
  <packaging>war</packaging>

  <dependencies>
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-webmvc</artifactId>
      <version>5.2.10.RELEASE</version>
    </dependency>
    <dependency>
      <groupId>org.projectlombok</groupId>
      <artifactId>lombok</artifactId>
      <version>1.18.24</version>
    </dependency>
    <!--servlet依赖-->
    <dependency>
      <groupId>javax.servlet</groupId>
      <artifactId>javax.servlet-api</artifactId>
      <version>3.1.0</version>
    </dependency>
    <!--jackson依赖:把controller层方法返回的java对象转化为json字符串-->
    <dependency>
      <groupId>com.fasterxml.jackson.core</groupId>
      <artifactId>jackson-databind</artifactId>
      <version>2.13.3</version>
    </dependency>
    <!--文件上传依赖-->
    <dependency>
      <groupId>commons-fileupload</groupId>
      <artifactId>commons-fileupload</artifactId>
      <version>1.4</version>
    </dependency>
    <!--oss的依赖-->
    <dependency>
      <groupId>com.aliyun.oss</groupId>
      <artifactId>aliyun-sdk-oss</artifactId>
      <version>3.15.1</version>
    </dependency>
    <!--mysql的jar-->
    <dependency>
      <groupId>mysql</groupId>
      <artifactId>mysql-connector-java</artifactId>
      <version>8.0.28</version>
    </dependency>
    <!--druid-->
    <dependency>
      <groupId>com.alibaba</groupId>
      <artifactId>druid</artifactId>
      <version>1.2.8</version>
    </dependency>
  </dependencies>
</project>

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<Student> list(){
        List<Student> 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<params.length;i++){
                ps.setObject(i+1,params[i]);
            }
            int row = ps.executeUpdate();
            return row;
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            closeAll();
        }
        return 0;
    }

}
/**
  1. 四个属性: connection preparedStatement ResultSet  DataSource
  2. 静态代码块:[获取连接池]
  3. 获取连接对象的方法
  4. 关闭资源方法
  5. 通用的增删改方法
 */

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<Student> findAll(){
        List<Student> list=new ArrayList<Student>();
        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配置文件

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:context="http://www.springframework.org/schema/context"
       xmlns:mvc="http://www.springframework.org/schema/mvc"
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context https://www.springframework.org/schema/context/spring-context.xsd http://www.springframework.org/schema/mvc https://www.springframework.org/schema/mvc/spring-mvc.xsd">

    <!--com.ykq 扫描该包以及该包下的子包-->
    <context:component-scan base-package="com.Hs"/>

    <!--开启注解驱动 不要导错mvc 默认使用的不是注解模式-->
    <mvc:annotation-driven/>

    <!--放行静态资源-->
    <mvc:default-servlet-handler/>

    <!--视图解析-->
    <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        <property name="prefix" value="/views/"/>
        <property name="suffix" value=".jsp"/>
    </bean>

    <!--文件上传解析器 id:必须为multipartResolver-->
    <bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
        <!--设置文件上传的大小 单位为byte字节 1M=1024kb=1024b  10*1024*1024-->
        <property name="maxUploadSize" value="10485760"/>
        <!--设置编码-->
        <property name="defaultEncoding" value="utf-8"/>
    </bean>

</beans>

3.6 编写upload.jsp文件

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1971428.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

HarmonyOS(47) onSizeChange和onAreaChange

onSizeChange和onAreaChange onSizeChangeonAreaChangeonAreaChange和onSizeChange的区别参考资料 onSizeChange 组件区域变化时触发该回调。仅会响应由布局变化所导致的组件尺寸发生变化时的回调。由绘制变化所导致的渲染属性变化不会响应回调&#xff0c;如translate、offse…

深度学习模型服务端部署——flask+gunicorn+supervisor+nginx+docker

前言&#xff1a;深度学习模型经过前期的训练调优评估&#xff0c;最终得到一个精度速度满足要求的模型(.pth, .ckpt&#xff0c;或者.onnx等等格式)&#xff0c;但模型要实际用起来&#xff0c;还得部署起来&#xff0c;部署分为在移动端芯片上和服务器上。在移动端芯片部署通…

联邦学习开山之作论文解读与Pytorch实现FedAvg

参考文献&#xff1a;McMahan B, Moore E, Ramage D, et al. Communication-efficient learning of deep networks from decentralized data[C]//Artificial intelligence and statistics. PMLR, 2017: 1273-1282. 参考的文章&#xff1a; 1.联邦学习代码解读&#xff0c;超详细…

Object.defineProperty在Vue2双向绑定中的核心原理及应用

目录 1.Object.defineProperty方法 &#xff08;1&#xff09;介绍 &#xff08;2&#xff09;语法 &#xff08;3&#xff09;descriptor属性描述符 2.Object.defineProperty在Vue2双向绑定的核心原理 3.Object.defineProperty在vue2中的应用 &#xff08;1&#xff09…

专业人士如何选?揭秘4款2024年常用的电脑录屏软件!

在这个数字化时代&#xff0c;无论是教学、演示、游戏直播还是软件操作&#xff0c;电脑录屏软件已经是我们日常工作中的好帮手。但市面上这么多的电脑录屏软件&#xff0c;要想挑一款既专业又好用的&#xff0c;还真是挺让人头疼的。今天&#xff0c;我们就来聊聊四款常用的电…

mybatis开启数据库的驼峰命名

在application.yml文件中添加 mybatis:configuration:map-underscore-to-camel-case: true

powerjob连接postgresql数据库(支持docker部署)

1.先去pg建一个powerjob-product库 2.首先去拉最新的包&#xff0c;然后找到server模块&#xff0c;把mysql的配置文件信息替换成pg的 spring.datasource.hikari.auto-committrue spring.datasource.remote.hibernate.properties.hibernate.dialecttech.powerjob.server.pers…

全自动迷你洗衣机什么牌子好?五款卓越内衣洗衣机大合集!

随着科技的发展&#xff0c;市面上也出现许多便利的小家电。其中被多次讨论起来的莫过于是内衣洗衣机&#xff0c;选择一款耐用、质量优秀的内衣洗衣机&#xff0c;不仅可以减少洗衣负担&#xff0c;还能提供高效的洗涤效果。然而&#xff0c;随着内衣洗衣机的爆火&#xff0c;…

maven仓库密码加密方案原理

前言 有一个要求就是说不能使用明文密码&#xff0c;需要对 settings.xml 文件中的password密码进行加密 原始配置是没有对密码进行加密的 <server><id>gleam-repo</id><username>admin</username><password>admin123</password>&l…

7.2 单变量(多->多),attention/informer

继续上文书写&#xff1a; 1 GRU Attention 收敛速度稳定的很多&#xff0c;你看这些模型是不是很容易搭&#xff0c;像积木一样&#xff1b; def create_model(input_shape, output_length,lr1e-3, warehouse"None"):input Input(shapeinput_shape)conv1 Conv…

怎么给电脑文件加密?实用的四种方法,「重磅来袭」!

小李&#xff1a;“嘿&#xff0c;小张&#xff0c;你上次提到的那个重要项目报告&#xff0c;我放在了电脑里&#xff0c;但总觉得不太安全&#xff0c;万一被误删了或者不小心泄露了怎么办&#xff1f;” 小张&#xff1a;“别担心&#xff0c;小李&#xff0c;给文件加密是…

如何提高工作效率?分享9个高效率工作的方法

如果您的企业正在面临以下问题&#xff1a; 员工敏捷性和生产力降低员工满意度不足利润下降 那么您需要创建一个运营改进指南。 这需要经常更新&#xff0c;因为这不是一次性的努力&#xff0c;而是必须定期进行的持续过程。然而&#xff0c;您的运营改进指南还必须强调优化…

java 垃圾回收器以及JVM调优方式

什么是垃圾&#xff1a; 没有被引用的对象 就是垃圾。 定位的方式 reference count: 引用计数&#xff0c;即在对象上记录着有多少个引用指向它。&#xff08;循环引用无法解决&#xff09; root searching: 根可达算法&#xff0c;根对象包含 线程栈变量&#xff0c;静态变…

bootStrap中操作行详情,删除,修改等操作

点击列表某一行的操作按钮&#xff0c;结合swtich case 出发不同操作

【2024算力大会分会 | SPIE出版】2024云计算、性能计算与深度学习国际学术会议(CCPCDL 2024)

【2024算力大会分会 | SPIE出版】 2024云计算、性能计算与深度学习国际学术会议(CCPCDL 2024) 2024 International conference on Cloud Computing, Performance Computing and Deep Learning CCPCDL往届均已完成EI检索&#xff0c;最快会后4个半月完成&#xff01; 2024中…

postgresql 11.17 开发环境rpm安装及扩展安装

进入postgresql安装文件rpm所在文件夹 cd /data460/software 执行 yum local install *.rpm 提示缺少啥依赖就对应yum安装 最后有个依赖比较特殊 Requires: llvm-toolset-7-clang > 4.0.1 You could try using --skip-broken to work around the problem 需要安装centos-re…

Spring WebFlux 整合 r2dbc 的增删改查案例

无障碍阅读方法 微信公众号关注:张家的小伙子 回复:10205文章目录 无障碍阅读方法说明准备创建mysql数据库和数据表创建一个maven项目添加项目依赖包创建项目基本目录接口启动类编写编写application配置添加跨域请求配置创建实体-数据表映射类创建Dao操作类编写自己的增删改…

VS code 美化之 代码窗背景图 日志2024/8/2

VS code 美化之 代码窗背景图 先看效果: 参考文档: VSCode设置背景图片的两种方式_vscode代码背景-CSDN博客 用插件那个方法我试了,其只会在右侧 侧边栏目出现背景图,可能是我设置不正确吧 而且安装这个插件之后出现弹窗 vscode安装出现问题什么的提示,删除这个拓展就不会有…

时间价值衰减对期权价格有哪些影响?投资必知!

今天带你了解时间价值衰减对期权价格有哪些影响&#xff1f;投资必知&#xff01;期权的时间对期权的价格和价值具有重要影响&#xff0c;这是由于期权的特性和市场机制决定的&#xff0c;其实期权的时间价值是会衰减的。 期权的时间价值&#xff0c;指的是潜在的可能性。 比…

TypeScript(switch判断)

1.switch 语法用法 switch是对某个表达式的值做出判断。然后决定程序执行哪一段代码 case语句中指定的每个值必须具有与表达式兼容的类型 语法switch(表达式){ case 值1&#xff1a; ​ 执行语句块1 break; case 值2&#xff1a; ​ 执行语句块3 break; dfault: //如…