目录

代码结构如下

代码

pom文件

工具类

枚举

service

Controller

application.yml


代码结构如下

代码

pom文件

<?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.xiaojie</groupId><artifactId>pic-demo</artifactId><version>1.0-SNAPSHOT</version><properties><maven.compiler.source>8</maven.compiler.source><maven.compiler.target>8</maven.compiler.target></properties><parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.4.2</version><relativePath/></parent><!--七牛云--><dependencies><dependency><groupId>com.squareup.okhttp3</groupId><artifactId>okhttp</artifactId><version>3.14.2</version><scope>compile</scope></dependency><dependency><groupId>com.google.code.gson</groupId><artifactId>gson</artifactId><version>2.8.5</version><scope>compile</scope></dependency><dependency><groupId>com.qiniu</groupId><artifactId>happy-dns-java</artifactId><version>0.1.6</version><scope>test</scope></dependency><dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>4.12</version><scope>test</scope></dependency><dependency><groupId>com.qiniu</groupId><artifactId>qiniu-java-sdk</artifactId><version>7.8.0</version></dependency>
<!--lombok--><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><optional>true</optional></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency></dependencies>
</project>

工具类

package com.xiaojie.upload.utils;import com.qiniu.common.QiniuException;
import com.qiniu.common.Zone;
import com.qiniu.http.Response;
import com.qiniu.storage.Configuration;
import com.qiniu.storage.UploadManager;
import com.qiniu.util.Auth;
import org.springframework.stereotype.Component;/*** @Description:七牛云上传文件工具类* @author: xiaojie* @date: 2021.07.27*/
@Component
public class QiNiuUtils {private static final String ACCESS_KEY = "ACCESS_KEY";private static final String SECRET_KEY = "SECRET_KEY";//图片命名空间private static final String BUCKET = "BUCKET";//密钥配置static Auth auth = Auth.create(ACCESS_KEY, SECRET_KEY);//第二种方式: 自动识别要上传的空间(bucket)的存储区域是华东、华北、华南。static Zone z = Zone.autoZone();static Configuration c = new Configuration(z);//创建上传对象static UploadManager uploadManager = new UploadManager(c);//简单上传,使用默认策略,只需要设置上传的空间名就可以了public static String getUpToken() {return auth.uploadToken(BUCKET);}/*** @param filePath 上传文件路径* @param filename  上传到七牛云之后的路径* @todo* @author xiaojie* @date 2021/7/28 9:59* @return java.lang.String*/public static Response upLoadImage(String filePath, String filename) {Response res=null;try {//调用put方法上传res = uploadManager.put(filePath, filename, getUpToken());//打印返回的信息System.out.println(res.bodyString());} catch (QiniuException e) {Response r = e.response;// 请求失败时打印的异常的信息System.out.println(r.toString());try {//响应的文本信息System.out.println(r.bodyString());} catch (QiniuException e1) {//ignore}}return res;}public static void main(String[] args) throws QiniuException {Response response1 = upLoadImage("C:\\Users\\HTGY02\\Desktop\\1.jpg", "00123.jpg");System.out.println(response1.bodyString());//qww9cg61f.hb-bkt.clouddn.com/1.jpg_ws.girl}
}

生成文件名称工具类

枚举

package com.xiaojie.upload.myenum;
public enum FileType {/*** JPEG*/JPEG("FFD8FF", "jpg"),/*** PNG*/PNG("89504E47", "png"),/*** GIF*/GIF("47494638", "gif"),/*** TIFF*/TIFF("49492A00"),/*** Windows bitmap*/BMP("424D"),/*** CAD*/DWG("41433130"),/*** Adobe photoshop*/PSD("38425053"),/*** Rich Text Format*/RTF("7B5C727466"),/*** XML*/XML("3C3F786D6C"),/*** HTML*/HTML("68746D6C3E"),/*** Outlook Express*/DBX("CFAD12FEC5FD746F "),/*** Outlook*/PST("2142444E"),/*** doc;xls;dot;ppt;xla;ppa;pps;pot;msi;sdw;db*/OLE2("0xD0CF11E0A1B11AE1"),/*** Microsoft Word/Excel*/XLS_DOC("D0CF11E0"),/*** Microsoft Access*/MDB("5374616E64617264204A"),/*** Word Perfect*/WPB("FF575043"),/*** Postscript*/EPS_PS("252150532D41646F6265"),/*** Adobe Acrobat*/PDF("255044462D312E"),/*** Windows Password*/PWL("E3828596"),/*** ZIP Archive*/ZIP("504B0304"),/*** ARAR Archive*/RAR("52617221"),/*** WAVE*/WAV("57415645"),/*** AVI*/AVI("41564920"),/*** Real Audio*/RAM("2E7261FD"),/*** Real Media*/RM("2E524D46"),/*** Quicktime*/MOV("6D6F6F76"),/*** Windows Media*/ASF("3026B2758E66CF11"),/*** MIDI*/MID("4D546864");private String value = "";private String ext = "";FileType(String value) {this.value = value;}FileType(String value, String ext) {this(value);this.ext = ext;}public String getExt() {return ext;}public String getValue() {return value;}}

service

package com.xiaojie.upload.service.impl;import com.qiniu.http.Response;
import com.qiniu.util.Json;
import com.xiaojie.upload.myenum.FileType;
import com.xiaojie.upload.service.UploadService;
import com.xiaojie.upload.utils.QiNiuUtils;
import com.xiaojie.upload.utils.StringUtils;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
import org.springframework.web.multipart.MultipartFile;import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import java.util.HashMap;
import java.util.Map;/*** @Description: 上传图片的接口* @author: xiaojie* @date: 2021.07.27*/
@Service
@Slf4j
public class UploadServiceImpl implements UploadService {//图片访问的域名private final String IMAGE_URL = "http://qww9cg61f.hb-bkt.clouddn.com/";//样式分隔符private final String IMAGE_PART = "_";//图片处理样式名称private final String IMAGE_PATTERN = "ws.girl";@Overridepublic Map<String, Object> upload(MultipartFile uploadFile) throws Exception {Map resultMap = new HashMap();if (uploadFile.isEmpty()) {throw new RuntimeException("the file is empty");}FileType fileType = getFileType(uploadFile.getInputStream());if (fileType == null) {throw new RuntimeException("fileType is null");}String orgName = uploadFile.getOriginalFilename(); // 获取文件原始名称//在linux环境部署时,请记得修改这个路径,目前没找到更好的办法File temp = new File("D:\\temp");//uploadFile是MultipartFile对象uploadFile.transferTo(temp);//获取到文件绝对路径String suffixName = orgName.substring(orgName.lastIndexOf(".")); //获取文件后缀log.info("suffixName.................{}", suffixName);String newName = StringUtils.getString(15) + suffixName; // 文件名称//七牛上传Response response = QiNiuUtils.upLoadImage(temp.getPath(), newName);log.info("response.................{}", response.bodyString());//获取上传后文件的key,文件名称if (response == null) {throw new RuntimeException("qiniu response is null");}resultMap = Json.decode(response.bodyString(), Map.class);String name = (String) resultMap.get("key");//由于七牛云原图保护需要如下方式访问 域名+key(文件名)+_(样式分隔符)+ws.girl(图片处理样式名称)// qww9cg61f.hb-bkt.clouddn.com/1.jpg_ws.girlresultMap.clear();resultMap.put("code", 200);resultMap.put("url", IMAGE_URL + name + IMAGE_PART + IMAGE_PATTERN);//删除临时文件temp.delete();return resultMap;}/** 获取文件类型,校验文件格式是否正确* @todo* @author xiaojie* @date 2021/7/28 11:05* @return com.xiaojie.upload.myenum.FileType*/public static FileType getFileType(InputStream is) throws IOException {byte[] src = new byte[28];is.read(src, 0, 28);StringBuilder stringBuilder = new StringBuilder("");if (src == null || src.length <= 0) {return null;}for (int i = 0; i < src.length; i++) {int v = src[i] & 0xFF;String hv = Integer.toHexString(v).toUpperCase();if (hv.length() < 2) {stringBuilder.append(0);}stringBuilder.append(hv);}FileType[] fileTypes = FileType.values();for (FileType fileType : fileTypes) {if (stringBuilder.toString().startsWith(fileType.getValue())) {return fileType;}}return null;}
}

Controller

package com.xiaojie.upload.api;import com.xiaojie.upload.service.UploadService;
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.util.Map;/*** @Description:* @author: xiaojie* @date: 2021.07.27*/
@RestController
@Slf4j
public class FileUpload {@Autowiredprivate UploadService uploadService;@PostMapping("/upload")public Map<String, Object> upload(MultipartFile file) throws Exception {log.info("进入接口。。。。。。。。。。。。。。。");Map<String, Object> result = uploadService.upload(file);log.info("file.................."+file);return result;}
}

application.yml

spring:servlet:multipart:enabled: truemax-file-size: 5MBmax-request-size: 20MB

Springboot整合七牛云上传图片相关推荐

  1. SpringBoot 整合七牛云上传图片

    在个人的一个项目中有一些需求需要用到图片文件上传,那么相比于阿里云我选择了七牛云,主要还是想白嫖,哈哈. 七牛云每个月有一定的免费额度,对于目前我的项目来说还是足够用的 阿里云OSS个人理解是上传不收 ...

  2. Springboot整合七牛云

    springboot整合七牛云 1.当我在做一个简单的后台管理系统时候· 需要制作一个接口来上传自己的图片 为此需要配合springboot整合 七牛云 1.上传工具类 (${qiniu.access ...

  3. SpringBoot(24) 整合七牛云实现文件上传

    一.前言 本文将基于springboot2.1.8.RELEASE整合七牛云实现文件上传 本文参考 https://www.keppel.fun/articles/2019/02/27/1551262 ...

  4. 后端七牛云上传图片流程以及后续异常javax.net.ssl.SSLHandshakeException处理

    一.sprinboot整合七牛云 1.先导入依赖 <dependency><groupId>com.qiniu</groupId><artifactId> ...

  5. 使用七牛云上传图片时出现Network error during preQuery和运行时出现okhttp的问题

    问题描述 1.使用七牛云上传图片时出现Network error during preQuery,但网络正常 原因分析:排除网络原因,尝试网络配置方向调整 Configuration configur ...

  6. 七牛云上传图片和视频

    先说本文主要的重点: 七牛云上传图片(包括从相机获取的和从相册获取的)    七牛云上传视频       8.0手机调起相机        都会进行描述    多图片和多视频上传    获取图片后缀 ...

  7. 七牛云 上传图片到七牛云并返回图片URL

    七牛云 上传图片到七牛云并返回图片URL 鸣谢'追逐盛夏流年':https://blog.csdn.net/j1231230/article/details/80061834 在开发项目的时候,经常会 ...

  8. Java实现七牛云上传图片、读取图片链接

    Java后端实现七牛云上传图片.读取图片链接 添加依赖 <!--七牛云sdk--><dependency><groupId>com.qiniu</groupI ...

  9. 七牛云上传图片报错处理

    {ResponseInfo:com.qiniu.http.Response@62bd765,status:400, reqId:d4kAAACMt2hWMSEW, xlog:X-Log, xvia:, ...

  10. python对接七牛云上传图片代码,可运行

    python对接七牛云上传图片,可运行 一.准备工作 注册七牛云获取: 1.Access Key(注册认证后自动生成) 2.Secret Key(注册认证后自动生成) 3.空间名称:ihome(创建空 ...

最新文章

  1. 20nian5yue最热门的Python开源项目
  2. jdbc封装工具类代码_JDBC的使用-JDBC(3)
  3. Chapter3_操作符_方法调用中的别名问题
  4. 初学__Python——Python 函数参数的使用
  5. emq+mysql设置_EMQ--添加mysql认证及mysql插件访问控制
  6. LeetCode 67. 二进制求和
  7. c语言即时通讯软件源码,即时通讯软件源码-基于c语言即时通讯软件代码实现
  8. MDX Step by Step 读书笔记(四) - Working with Sets (使用集合)
  9. 全方位测评Hive、SparkSQL、Presto 等七个大数据查询引擎,最快的竟是……| 程序员硬核测评...
  10. c语言程序 题库管理,C语言程序设计题库管理.doc
  11. linux sigar 进程监控,Linux 下使用Sigar 获取CPU 使用率
  12. FULENT软件测试自学,fluent网格质量检查 - 仿真模拟 - 小木虫 - 学术 科研 互动社区...
  13. Python基础---如何运行Python程序?(How to Excute a python programe?)
  14. java计算机毕业设计springboot+vue健康体检信息管理系统
  15. android项目导入zoom视频会议流程
  16. 神雕侠侣手游服务器维护,《神雕侠侣》2020年6月18日更新维护新服开启公告
  17. 好看的个人网站源码_新手想建个人网站,都要注意哪些关于自助建站源码的坑?...
  18. 互联网摸鱼日报(2023-01-11)
  19. UG8.5 正式版安装方法
  20. python之红楼梦词频统计并生成图云

热门文章

  1. BIOS报警声_文伟_新浪博客
  2. 将word文档转换为图片格式的PDF
  3. 好多游戏,大部分都有修改器,大家赶紧下!
  4. 手把手教会你 | 多用户-服务器聊天室应用软件开发
  5. ZebraDesigner-设计label
  6. UE4添加人物动画之前后左右移动
  7. 索尼pha2 android手机,索尼PHA-2A便携式耳机放大器图文评测
  8. 解决spring5与thymeleaf版本冲突的问题
  9. 夏普mx2608n网络扫描到计算机,【转载】夏普复印机网络扫描教程
  10. 低版本浏览器如何兼容html5,解决Vue兼容低版本浏览器的简单方法