web文件上传

文件上传指的是,将本地的图片、视频、音频上传到服务器,提供给其他用户浏览和下载的过程

前端需求

想要进行文件上传对于web前端来说有三个重要要素

1.<input type="file" name="image"> 提供这样的file文件上传格式
2. method="post" 由于上传文件一般比较大,所以上传格式采用post类型
3. enctype="multipart/form-data" 设置文件编码格式,如果不选这个提交的就是文件名

action="/upload"表示提交的位置

    <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>

后端代码

  1. HTML中的name应该要与public Result upload()中的形参名称一一对应,如果没有对应记得进行映射。
  2. MultipartFile img用于图像对象
package com.ztt.controller;import com.ztt.pojo.Result;
import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.multipart.MultipartFile;@Slf4j
@RestController
public class UploadController {@PostMapping("/upload")public Result upload(String username, Integer age, MultipartFile img){log.info("文件上传:{}{}{}",username,age,img);return Result.success();}
}

本地存储

服务端接收到上传的文件后,将文件保存到本地的磁盘目录上。

@Slf4j
@RestController
public class UploadController {@PostMapping("/upload")public Result upload(String username, Integer age, MultipartFile image) throws Exception{log.info("文件上传:{}{}{}",username,age,image);// 获取文件名称String originalFilename = image.getOriginalFilename();// 将文件存储在本地服务器的磁盘目录下image.transferTo(new File("D:\\images\\"+originalFilename));return Result.success();}
}

注意,本地存储的路径一定要事先准备好,否则会保存

java.io.IOException: java.io.FileNotFoundException: D:\images[3].jpg (系统找不到指定的路径。)

测试的话使用POSTMAN就可以,使用post发送,选择File文件发送即可。
在这里插入图片描述

在springboot中,文件上传单次允许最大为1MB。如果需要进行大文件上传,需要进行配置。

在resources中的application.properties中进行配置。
在这里插入图片描述

# 单个文件上传限制
spring.servlet.multipart.max-file-size=10MB# 单个请求最大限制
spring.servlet.multipart.max-request-size=100MB

保证文件名唯一性

如果存储在同一路径下,可能导致服务器路径重复或名称重复导致文件被覆盖。为解决这个问题,我们一般采用UUID的方法。

String originalFilename = image.getOriginalFilename();
// 将文件存储在本地服务器的磁盘目录下
// 获取文件扩展名
int index = originalFilename.lastIndexOf(".");
String exname = originalFilename.substring(index);String newFileName = UUID.randomUUID() + exname;
// 构造文件唯一性(不能重复) 适应 --uuid(通用唯一识别码)

阿里云OSS

在这里插入图片描述
java引入依赖

<!--阿里云OSS依赖-->
<dependency><groupId>com.aliyun.oss</groupId><artifactId>aliyun-sdk-oss</artifactId><version>3.15.1</version>
</dependency>

java 9 以上的版本还需要引入下面的依赖

<dependency><groupId>javax.xml.bind</groupId><artifactId>jaxb-api</artifactId><version>2.3.1</version>
</dependency>
<dependency><groupId>javax.activation</groupId><artifactId>activation</artifactId><version>1.1.1</version>
</dependency>
<!-- no more than 2.3.3-->
<dependency><groupId>org.glassfish.jaxb</groupId><artifactId>jaxb-runtime</artifactId><version>2.3.3</version>
</dependency>

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

定位服务器CPU爆满的具体原因

1、查询CPU消耗的进程 使用top命令查看系统的CPU和内存使用情况 CPU一列是线程占用百分比 2、具体查看某个占分比大的进程 以为PId:7355为例&#xff0c; 执行top -Hp 7355&#xff0c;线程按照CPU使用率排序。 3、将线程PID转化为16进制 执行printf %x 7391&#xff0c;将…

Kubernetes 使用 Rancher 管理

K8S集群管理工具 只能管理单个K8S集群 kubectl命令行管理工具 dashboard&#xff08;K8S官方的UI界面图形化管理工具&#xff09; &#xff08;管理多集群很麻烦&#xff0c;切换不同集群每次需要更改kube-config文件[kubectl配置文件]&#xff0c;如果kubeadm部署每次都需…

k8s 认证和权限控制

k8s 的认证机制是啥&#xff1f; 说到 k8s 的认证机制&#xff0c;其实之前咋那么也有提到过 ServiceAccouont &#xff0c;以及相应的 token &#xff0c;证书 crt&#xff0c;和基于 HTTP 的认证等等 k8s 会使用如上几种方式来获取客户端身份信息&#xff0c;不限于上面几种…

Segment Anything论文阅读笔记

Segment Anything论文阅读笔记 1. Segment Anything论文基本信息2. Segment Anything论文阅读2.1 第一遍阅读 Segment Anything2.2. 第二遍阅读 Segment Anything2.2.1. Segment Anything中相关的图表 1. Segment Anything论文基本信息 论文地址https://arxiv.org/abs/2304.02…

构建高可用的去中心化微服务集群架构指南

随着云计算、大数据和物联网的快速发展&#xff0c;企业对于可扩展的、高性能的微服务架构的需求也日益增长。传统的集中式架构已经不能满足这些需求&#xff0c;因此出现了去中心化的微服务集群架构。本文将介绍如何构建高可用的去中心化微服务集群架构&#xff0c;以满足企业…

虚幻官方项目《CropOut》技术解析 之 程序化岛屿生成器(IslandGenerator)

开个新坑详细分析一下虚幻官方发布的《CropOut》&#xff0c;文章会同步发布到我在知乎|CSDN的专栏里 文章目录 概要Create Island几何体生成部分随机种子Step 1Step 2Step 3Step 4Step 5Step 6 岛屿材质部分动态为草地设置颜色 程序设计的小技巧其它Platform Switch函数 概要 …

pdf格式文件下载不预览,云存储的跨域解决

需求背景 后端接口中返回的是pdf文件路径比如&#xff1a; pdf文件路径 &#xff08;https://wangzhendongsky.oss-cn-beijing.aliyuncs.com/wzd-test.pdf&#xff09; 前端适配是这样的 <ahref"https://wangzhendongsky.oss-cn-beijing.aliyuncs.com/wzd-test.pdf&…

记录首次面试2023-08-18

人生第一次面试&#xff0c;大概一个小时左右。没有问我C的&#xff0c;上来一个数据库事务&#xff0c;虽然没有复习&#xff0c;但是还是能够记住一些&#xff0c;主要问的一些事务的隔离级别&#xff0c;以及都有什么作用&#xff0c;我是举例回答的&#xff0c;客户端A和客…

PHP加密与安全的最佳实践

PHP加密与安全的最佳实践 概述 在当今信息时代&#xff0c;数据安全是非常重要的。对于开发人员而言&#xff0c;掌握加密和安全的最佳实践是必不可少的。PHP作为一种常用的后端开发语言&#xff0c;提供了许多功能强大且易于使用的加密和安全性相关函数和类。本文将介绍一些P…

网络编程面试笔试题

一、OSI 7层模型&#xff0c;TCP/IP 4层模型 5层模型。 以及每一层的功能&#xff08;重点&#xff1a;第三层 第四层&#xff09; 答&#xff1a; 7层模型&#xff08;①物理层&#xff1a;二进制比特流传输&#xff0c;②数据链路层&#xff1a;相邻结点的可靠传输&#xf…

Django的模型

定义模型 from django.db import models class User(models.Model):# 类属性是表示表的字段username models.CharField(max_length50,uniqueTrue)password models.CharField(max_length200)create_time models.DateTimeField(auto_now_addTrue) # auto_now_add新增数据时间…