图片/视频上传(超简单教程)

devtools/2024/9/24 12:44:13/

#应用场景#

1.视频上传

写在Controller层

这里只是一个接收,调用uploadObject方法上传oss

java">public OmsResult<FileUploadDto> goodsUploadVideo(@RequestParam(value = "file") MultipartFile multipartFile, HttpServletRequest request, HttpServletResponse response) {FileUploadDto fileUploadDto = new FileUploadDto();if (null == multipartFile) {return OmsResult.error("文件传输格式错误");}String originalFilename = multipartFile.getOriginalFilename();if (StringUtil.isEmpty(originalFilename)) {return OmsResult.error("文件名缺失");}if (originalFilename != null) {// 校验文件扩展名if (!checkFormatVideo(originalFilename)) {return OmsResult.error("仅支持mp4, mov, m4v, flv, x-flv, mkv, wmv, avi格式");}// 校验文件大小if (multipartFile.getSize() > FileSizeConstant.FILE_20MB) {return OmsResult.error("文件大小不得超过20MB");}try {String[] split = originalFilename.split("\\.");// 拼接上传文件名GV+当前时间(24小时)+随机数String fileName = "GV" + "当前时间" + randomLetterGenerator() + "." + split[1];// 获取文件输入流InputStream inputStream = multipartFile.getInputStream();//上传文件到OSS//这行代码调用ossClient对象的uploadObject2OSS4SimplePathByIn方法,将文件上传到OSS。其中,inputStream是文件输入流,fileName是文件名,GV是文件在OSS中的存储路径前缀String url = ossClient.uploadObject(inputStream, fileName, "GV");log.info("goodsUploadVideo URL:{}", url);fileUploadDto.setFileUrl(fileName);fileUploadDto.setVideoSize(String.valueOf(multipartFile.getSize()));return OmsResult.success(fileUploadDto);} catch (Exception e) {log.error("goodsUploadVideo Error", e);return OmsResult.error("上传文件失败");}
java">    /*** 随机生成4位大写英文字母* @return*/private String randomLetterGenerator() {SecureRandom random = new SecureRandom();StringBuilder randomLetters = new StringBuilder();for (int i = 0; i < 4; i++) {int index = random.nextInt(26);char letter = (char) ('a' + index);randomLetters.append(letter);}return randomLetters.toString();}

后缀校验

java">private boolean checkFormatVideo(String originalFilename) {if (StringUtil.isEmpty(originalFilename)) {return false;}String s = originalFilename.toLowerCase();//需要什么自己加后缀return s.endsWith(".mp4") || s.endsWith(".mov") || s.endsWith(".m4v") || s.endsWith(".flv")|| s.endsWith(".x-flv") || s.endsWith(".mkv") || s.endsWith(".wmv") || s.endsWith(".avi");}

⭐最后说下uploadObject这个方法

这部分一般公司都有公共的轮子

java">public String uploadObject(InputStream in, String fileName, String folder, String... bucketName) {if (StringUtils.isEmpty(folder)) {folder = "";}String bucketNameTmp = this.bucketName;if (bucketName != null && bucketName.length > 0) {bucketNameTmp = bucketName[0];}String url = null;try {ObjectMetadata metadata = new ObjectMetadata();metadata.setContentLength((long)in.available());metadata.setCacheControl("no-cache");metadata.setHeader("Pragma", "no-cache");metadata.setContentEncoding("utf-8");metadata.setContentType(this.getContentType(fileName));metadata.setContentDisposition("filename/filesize=" + fileName);PutObjectResult putResult = this.ossClientConfig.putObject(bucketNameTmp, folder + fileName, in, metadata);String resultStr = putResult.getETag();if (StringUtils.isNotEmpty(resultStr)) {url = folder + fileName;}} catch (Exception var10) {var10.printStackTrace();log.error("上传阿里云OSS服务器异常." + var10.getMessage(), var10);}return url;}

这个是用于将文件上传到阿里云对象存储服务(OSS)的Java方法

  • 使用ossClientConfig对象的putObject方法执行上传操作。这个方法需要存储桶名称、文件路径(文件夹+文件名)、输入流和元数据信息。
  • PutObjectResult对象中获取ETag(一个代表文件内容的哈希值),并检查它是否为空。如果不为空,则设置url为上传文件的路径(文件夹+文件名)。
  • 如果在上传过程中发生异常,则捕获该异常并打印堆栈跟踪,并记录错误日志。

前端vue逻辑和oss方法可以参考一下这篇文章

http://t.csdnimg.cn/2yaig

2.图片上传

controller逻辑

java">public void uploadImportFile(@RequestParam("fileImport") MultipartFile fileImport, HttpServletRequest request, HttpServletResponse response) {JSONObject result = new JSONObject();BufferedInputStream in = null;try {// 上传文件类型 1商贸店铺申请附件 2商贸店铺LOGO附件 3其他String fileType = request.getParameter("fileType");if (null == fileImport || StringUtils.isBlank(fileImport.getOriginalFilename())) {result.put(ResponseConstant.RESPONSE_CODE, "400");result.put(ResponseConstant.RESPONSE_MSG, "上传的文件为空,请重新上传");this.writeData(result, response);return;}String fileName = fileImport.getOriginalFilename();// 判断文件大小if ("1".equals(fileType) || "2".equals(fileType)) {if("1".equals(fileType)){if (fileImport.getSize() > FileSizeConstant.FILE_1MB) {result.put(ResponseConstant.RESPONSE_CODE, "400");result.put(ResponseConstant.RESPONSE_MSG, "当前上传的文件过大,大小不能超出1M");this.writeData(result, response);return;}} else if ("2".equals(fileType) && fileImport.getSize() > FileSizeConstant.FILE_20MB) {result.put(ResponseConstant.RESPONSE_CODE, "400");result.put(ResponseConstant.RESPONSE_MSG, "当前上传的文件过大,大小不能超出20M");if (!fileName.endsWith(".png") && !fileName.endsWith(".jpeg") && !fileName.endsWith(".jpg")) {result.put(ResponseConstant.RESPONSE_CODE, "400");result.put(ResponseConstant.RESPONSE_MSG, "上传的文件类型错误,请重新上传,只支持png、jpeg、jpg格式文件");this.writeData(result, response);return;}} else {if (fileImport.getSize() > FileSizeConstant.FILE_32MB) {result.put(ResponseConstant.RESPONSE_CODE, "400");result.put(ResponseConstant.RESPONSE_MSG, "当前上传的文件过大,大小不能超出32M");this.writeData(result, response);return;}if (!fileName.endsWith(".xls") && !fileName.endsWith(".xlsx")&& !fileName.endsWith(".pdf") && !fileName.endsWith(".png") && !fileName.endsWith(".jpeg") && !fileName.endsWith(".jpg")&& !fileName.endsWith(".rar") && !fileName.endsWith(".zip")) {result.put(ResponseConstant.RESPONSE_CODE, "400");result.put(ResponseConstant.RESPONSE_MSG, "上传的文件类型错误,请重新上传,pdf、png、jpeg、jpg、xls、xlsx、rar、zip");this.writeData(result, response);return;}}
//上传文件的时间String uploadTime = DateUtils.getToday("yyyyMMddHHmmssSSS") + SaltUtil.getRandom();String fileNameNew = uploadTime + SaltUtil.randomGenerate() + fileName.substring(fileName.lastIndexOf("."));in = new BufferedInputStream(fileImport.getInputStream());String url = ossClient.uploadObject(in, fileNameNew, null);if (StringUtils.isNotBlank(url)) {result.put(ResponseConstant.RESPONSE_CODE, "200");result.put(ResponseConstant.RESPONSE_MSG, "上传成功");result.put("data", url);this.writeData(result, response);} else {result.put(ResponseConstant.RESPONSE_CODE, "400");result.put(ResponseConstant.RESPONSE_MSG, "上传失败,请重新上传");this.writeData(result, response);}} catch (Exception e) {log.error("上传文件异常:{}", e);result.put(ResponseConstant.RESPONSE_CODE, "500");result.put(ResponseConstant.RESPONSE_MSG, "系统繁忙,请稍后重试");this.writeData(result, response);} finally {IOUtils.closeQuietly(in);}}


http://www.ppmy.cn/devtools/8724.html

相关文章

【深度学习实战(16)】语义分割性能评价指标PA,MIoU介绍

一、混淆矩阵 混淆矩阵就是统计分类模型的分类结果&#xff0c;即&#xff1a;统计归对类&#xff0c;归错类的样本的个数&#xff0c;然后把结果放在一个表里展示出来&#xff0c;这个表就是混淆矩阵。 对于二分类问题&#xff0c;将类别1称为正例&#xff08;Positive&#…

前端HTML面试题:meta 元素都有什么

在HTML中&#xff0c;<meta> 元素是一个非常重要且常用的元素&#xff0c;它用于表示关于HTML文档的元数据&#xff08;metadata&#xff09;&#xff0c;这些元数据不会直接显示在页面上&#xff0c;但可以被浏览器以及其他网页服务利用。在前端开发的面试中&#xff0c…

智能边缘计算采集网关助您远程调试SINAMICS S200伺服-天拓四方

您还在为每次调试都要去现场而烦恼吗&#xff1f;智能边缘计算采集网关助您远程调试SINAMICS S200伺服&#xff0c;让您足不出户&#xff0c;就能“运筹帷幄之中&#xff0c;决胜千里之外”。 新品介绍 SINAMICS S200 PN是西门子推出的新一代伺服驱动系统&#xff0c;采用Mot…

esp32联网获取时间和天气(四)

说明 本章节需要先学习之前&#xff08;三&#xff09;中获取当前时间方法&#xff0c;本文基于platformIO&#xff0c;需提前安装timelib库&#xff0c;可以参考之前&#xff08;三&#xff09; 代码 代码如下&#xff0c;需要一点http知识&#xff0c;可以自行百度 #incl…

Tesseract OCR 的使用

目录 前言一、简介二、下载与安装2.1 下载2.2 安装2.3 配置环境变量 三、基本使用四、Java 整合4.1 导入依赖4.2 添加语言库4.3 代码示例 五、训练字库5.1 为什么要训练字库5.2 jTessBoxEditor 前言 如果想要通过代码的方式去识别图片中的文字&#xff0c;通常有以下几种方法&…

钉钉OA审批评论接口,如何@ 人并发送通知

钉钉OA审批评论接口&#xff0c;如何 人并发送通 问题描述&#xff1a; 相关接口&#xff1a;https://oapi.dingtalk.com/topapi/process/instance/comment/add 我希望在钉钉oa审批流程中&#xff0c;添加评论的同时通过“”或者其他方式提醒流程发起人去跟进审批工作。 但我…

2024五一杯数学建模A题思路分析

文章目录 1 赛题思路2 比赛日期和时间3 组织机构4 建模常见问题类型4.1 分类问题4.2 优化问题4.3 预测问题4.4 评价问题 5 建模资料 1 赛题思路 (赛题出来以后第一时间在CSDN分享) https://blog.csdn.net/dc_sinor?typeblog 2 比赛日期和时间 报名截止时间&#xff1a;2024…

SpringCloud +UniApp技术开发saas模式的智慧工地云平台源码,支持可视化大屏端、手机端、平板端、PC端

基于微服务架构JavaSpring Cloud UniApp MySql技术开发saas模式的一套智慧工地云平台源码&#xff0c;支持多端展示&#xff1a;可视化大屏端、手机端、平板端、PC端。 智慧工地平台支持项目级、公司级、集团级多级权限划分&#xff0c;可根据企业的组织架构进行项目权限、功能…