当前位置: 首页 > news >正文

文件 上传

目录

 文件上传

 本地存储

阿里云OSS


文件上传

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

前端程序上传文件页面三要素:

  • 表单必须有file域,用于选择要上传的文件
<input type="file" name="image"/>
  • 表单提交方式必须为POST

通常上传的文件会比较大,所以需要使用 POST 提交方式

  • 表单的编码类型enctype必须要设置为:multipart/form-data

普通默认的编码格式是不适合传输大型的二进制数据的,所以在文件上传时,表单的编码格 式必须设置为multipart/form-data 

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

后端:

  • 首先在服务端定义这么一个controller,用来进行文件上传,然后在controller当中定义一个 方法来处理 /upload 请求
  • 在定义的方法中接收提交过来的数据 (方法中的形参名和请求参数的名字保持一致)

 表单项的名字和方法中形参名不一致需要使用@RequestParam注解进行参数绑定

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

 本地存储

package com.itheima.controller;import com.itheima.pojo.Result;
import com.itheima.utils.AliOSSUtils;
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.RestController;
import org.springframework.web.multipart.MultipartFile;import java.io.File;
import java.io.IOException;
import java.util.UUID;@Slf4j
@RestController
public class UploadController {//本地存储文件@PostMapping("/upload")public Result upload(String username, Integer age, MultipartFile image) throws Exception {log.info("文件上传: {}, {}, {}", username, age, image);//获取原始文件名 - 1.jpg  123.0.0.jpgString originalFilename = image.getOriginalFilename();//构造唯一的文件名 (不能重复) - uuid(通用唯一识别码) de49685b-61c0-4b11-80fa-c71e95924018int index = originalFilename.lastIndexOf(".");String extname = originalFilename.substring(index);String newFileName = UUID.randomUUID().toString() + extname;log.info("新的文件名: {}", newFileName);//将文件存储在服务器的磁盘目录中 E:\imagesimage.transferTo(new File("E:\\images\\" + newFileName));return Result.success();}
}

阿里云OSS

配置阿里云信息

#阿里云OSS
aliyun:oss:endpoint: https://oss-cn-beijing.aliyuncs.comaccessKeyId: LTAI5tMtQzqKaStxqNfEdEATaccessKeySecret: VlpIeshpXbUSBIJV5TU5Acqo1SD8A5bucketName: wl-tlias-web
package com.itheima.utils;import lombok.Data;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;@Data
@Component
@ConfigurationProperties(prefix = "aliyun.oss")
public class AliOSSProperties {private String endpoint;private String accessKeyId;private String accessKeySecret;private String bucketName;
}

引入阿里云OSS上传文件工具类

package com.itheima.utils;import com.aliyun.oss.OSS;
import com.aliyun.oss.OSSClientBuilder;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
import org.springframework.web.multipart.MultipartFile;
import java.io.*;
import java.util.UUID;/*** 阿里云 OSS 工具类*/
@Component
public class AliOSSUtils {//    @Value("${aliyun.oss.endpoint}")
//    private String endpoint ;
//    @Value("${aliyun.oss.accessKeyId}")
//    private String accessKeyId ;
//    @Value("${aliyun.oss.accessKeySecret}")
//    private String accessKeySecret ;
//    @Value("${aliyun.oss.bucketName}")
//    private String bucketName ;@Autowiredprivate AliOSSProperties aliOSSProperties;/*** 实现上传图片到OSS*/public String upload(MultipartFile file) throws IOException {//获取阿里云OSS参数String endpoint = aliOSSProperties.getEndpoint();String accessKeyId = aliOSSProperties.getAccessKeyId();String accessKeySecret = aliOSSProperties.getAccessKeySecret();String bucketName = aliOSSProperties.getBucketName();// 获取上传的文件的输入流InputStream inputStream = file.getInputStream();// 避免文件覆盖String originalFilename = file.getOriginalFilename();String fileName = UUID.randomUUID().toString() + originalFilename.substring(originalFilename.lastIndexOf("."));//上传文件到 OSSOSS ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret);ossClient.putObject(bucketName, fileName, inputStream);//文件访问路径String url = endpoint.split("//")[0] + "//" + bucketName + "." + endpoint.split("//")[1] + "/" + fileName;// 关闭ossClientossClient.shutdown();return url;// 把上传到oss的路径返回}}

控制类:

package com.itheima.controller;import com.itheima.pojo.Result;
import com.itheima.utils.AliOSSUtils;
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.RestController;
import org.springframework.web.multipart.MultipartFile;import java.io.File;
import java.io.IOException;
import java.util.UUID;@Slf4j
@RestController
public class UploadController {@Autowiredprivate AliOSSUtils aliOSSUtils;@PostMapping("/upload")public Result upload(MultipartFile image) throws IOException {log.info("文件上传, 文件名: {}", image.getOriginalFilename());//调用阿里云OSS工具类进行文件上传String url = aliOSSUtils.upload(image);log.info("文件上传完成,文件访问的url: {}", url);return Result.success(url);}}


http://www.mrgr.cn/news/33433.html

相关文章:

  • 水果识别系统Python+卷积神经网络算法+人工智能+深度学习+计算机课设项目+TensorFlow+模型训练
  • [云服务器14] 搭建属于你自己的Git服务器
  • JVM OOM(OutOfMemoryError)问题排查与解决
  • 【JavaEE初阶】文件IO(上)
  • 【模板进阶】类模板中可变参的特殊继承方式
  • Java的格式化输出
  • 计算机网络笔记001
  • VScode配置连接远程服务器configure ssh Hosts
  • 【计算机网络 - 基础问题】每日 3 题(十八)
  • 轻量化网络 ---- MobileNet V2:Inverted residual with linear bottleneck
  • 笔记整理—内核!启动!—linux应用编程、网络编程部分(3)文件共享与标准IO
  • 二进制和位运算
  • C++模版初阶
  • 初识APC机制实现APC注入
  • 有女朋友后,怎么养成贤内助?为自己找个好伴侣,为孩子找个好妈妈,为母亲找个好儿媳
  • NLP 序列标注任务核心梳理
  • Linux —— 网络基础(一)
  • MySQL锁机制
  • 计算机毕业设计 基于Python的荣誉证书管理系统 Django+Vue 前后端分离 附源码 讲解 文档
  • 详解ps用法