学了Spring,SpringMVC,Mybatis这一套再来看SpringBoot,心里只有一句握草,好方便

这里对今天做的东西做个总结,然后在这之间先安利一个热部署的工具,叫spring-DevTools,用这个的好处就是省去了我们以往改动代码

还要重启项目才能测试效果的麻烦,项目比较小的时候倒还不要紧,万一项目大了,编译要好一会,那么重启会占用我们大量时间

引入方式用maven即可

<!-- https://mvnrepository.com/artifact/org.springframework.boot/spring-boot-devtools -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
<version>2.1.1.RELEASE</version>
</dependency>

  

进入正题:这个随笔包括上传到自己服务器(以本机localhost做测试)和七牛云存储文件(没错,是跟着牛客叶神来做的)

上传文件其实非常简单,因为Spring里面就是MultiPartFile一个参数就行,然后后台在相应做一些命名处理和规定路径即可

第一种,

写好业务服务类:

package com.nowcoder.toutiao.service.Impl;

import com.nowcoder.toutiao.Utils.ToutiaoUtil;
import com.nowcoder.toutiao.service.NewsService;
import org.springframework.stereotype.Service;
import org.springframework.web.multipart.MultipartFile; import java.io.File;
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.StandardCopyOption;
import java.util.UUID; @Service
public class NewsServiceImpl implements NewsService { @Override
public String saveLoadedFile(MultipartFile file) {
int pos = file.getOriginalFilename().lastIndexOf(".");
//判断点的位置
if (pos<0)
return null;
//获得文件的扩展名,png,jpg等
String fileExt = file.getOriginalFilename().substring(pos+1).toLowerCase();
if (!ToutiaoUtil.isFileAllowed(fileExt)){//判断是否为规定格式
return null;
}
String fileName = UUID.randomUUID().toString().replaceAll("-","")+"."+fileExt;
try {
//复制到路径下面
Files.copy(file.getInputStream(),new File(ToutiaoUtil.saveDir+fileName).toPath(),StandardCopyOption.REPLACE_EXISTING);
}catch (IOException e){
}
return ToutiaoUtil.TOUTIAO_DOMAIN+"image?name="+fileName;
}
}

  

然后ToutiaoUtil是一个工具类

package com.nowcoder.toutiao.Utils;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory; public class ToutiaoUtil {
//七牛云文件存储空间的域名,作为访问该图片用的url的前缀
public static String PREFIX = "http://pji43w60m.bkt.clouddn.com/";
//logger
private static final Logger logger = LoggerFactory.getLogger(ToutiaoUtil.class);
//文件扩展名
private static String[] IMAGE_FILE_EXT = {"png","bmp","jpg","jpeg"};
//本地存放文件的文件夹
public static String saveDir = "D:/UpLoad/";
//本地域名 localhost:8080
public static String TOUTIAO_DOMAIN = "http://127.0.0.1:8080/";
/**
* 判断文件扩展名是否符合
* */
public static boolean isFileAllowed(String fileExt){
for (String ext:IMAGE_FILE_EXT){
if (ext.equals(fileExt))
return true;
}
return false;
}
}

  

之后到控制器里面写接口:

    @RequestMapping(path = "/uploadImage",method = {RequestMethod.POST})
@ResponseBody
public String upLoad(@RequestParam("file")MultipartFile file){
try {
String fileUrl = newsService.saveLoadedFile(file);
if (fileUrl==null){
JSONObject json= new JSONObject();
json.put("result", JSONObject.toJSON("上传失败"));
return json.toJSONString();
}
JSONObject json= new JSONObject();
json.put("result", JSONObject.toJSON("上传图片成功"));
return json.toJSONString();
}catch (Exception e){
JSONObject json= new JSONObject();
json.put("result", JSONObject.toJSON("上传失败"));
return json.toJSONString();
}
}

  

上传文件前端我也不大会写,所以用Postman来测试,记得Key一定要与接口中写的参数保持一致

然后看返回

再去本地的路径下看一下,即ToutiaoUtil里面的D:/upload,可以看到上传成功

第二种是七牛云存储,这是我第一次接触这个

首先去七牛云注册一个账号,然后必须通过个人实名认证才能使用服务,这些完成后

在工程里引入七牛云的依赖,看官方文档https://developer.qiniu.com/kodo/sdk/1239/java,我就不把这一大段依赖贴出来了

在这之后,去控制台新建一个存储空间,记下密钥和空间名字,后面要用到

之后就是写代码了,为了方便,这里与上面不同的就是把存储的方式从存本地变成了上传七牛云,所以除了上传那部分,以及最后返回的部分,其余什么命名和判断格式都和第一种一样

我们把七牛云文档中的代码单独作为一个service

package com.nowcoder.toutiao.service.Impl;

import com.google.gson.Gson;
import com.nowcoder.toutiao.Utils.ToutiaoUtil;
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.storage.model.DefaultPutRet;
import com.qiniu.util.Auth;
import org.springframework.stereotype.Service;
import org.springframework.web.multipart.MultipartFile; import java.io.IOException;
import java.util.UUID; @Service
public class QiniuService { //上传七牛云
public String upload(MultipartFile file) throws IOException {
int pos = file.getOriginalFilename().lastIndexOf(".");
if (pos<0)
return null;
String fileExt = file.getOriginalFilename().substring(pos+1).toLowerCase();
if (!ToutiaoUtil.isFileAllowed(fileExt)){
return null;
}
String fileName = UUID.randomUUID().toString().replaceAll("-","")+"."+fileExt;
//构造一个带指定Zone对象的配置类
Configuration cfg = new Configuration(Zone.zone0());
//...其他参数参考类注释
UploadManager uploadManager = new UploadManager(cfg);
//...生成上传凭证,然后准备上传
String accessKey = "zk7UXbWxZKH2xdqN-lic119Pu3DMFMiFeZN5HRS2";
String secretKey = "mnLG5YtRvGevec4j_0QMf8l47qmgqrj9dIL10yiL";
String bucket = "yintianhaoupload";
//如果是Windows情况下,格式是 D:\\qiniu\\test.png
Auth auth = Auth.create(accessKey, secretKey);
String upToken = auth.uploadToken(bucket);
try {
Response response = uploadManager.put(file.getBytes(), fileName, upToken);
//解析上传成功的结果
DefaultPutRet putRet = new Gson().fromJson(response.bodyString(), DefaultPutRet.class);
System.out.println(putRet.key);
System.out.println(putRet.hash);
return ToutiaoUtil.PREFIX+putRet.key; } catch (QiniuException ex) {
Response r = ex.response;
System.err.println(r.toString());
try {
System.err.println(r.bodyString());
} catch (QiniuException ex2) {
//ignore
}
return null;
} }
}

  

之后就是写接口,这里我想在上传之后直接显示出图片,所以我把service的返回值直接设成了图片的访问地址,之后在接口里确认上传无误就只要redirect一下就行了

 @RequestMapping(path = "/uploadImageByQiniu",method = {RequestMethod.POST})
public String uploadFileByQiniu(@RequestParam("file")MultipartFile file) throws IOException {
String res = qiniuService.upload(file);
if (res!=null){
System.out.println(res);
return "redirect:"+res;
}else {
//不成功,返回库中已有的图片显示
return "redirect:http://pji43w60m.bkt.clouddn.com/cc89ae4e48ba406eb4257c955e65c6b2.png";
}
}

  

ok,又到了测试的时候:跟前面一样,看看效果

之后你若还不信,控制台有打印信息,即文件名,然后去对比一下七牛云云空间的图片,就能验证了

这里我控制台打印出来

再看七牛云,可以看到是一样的

SpringBoot初探(上传文件)的更多相关文章

  1. Springboot实现上传文件接口,使用python的requests进行组装报文上传文件的方法

    记录瞬间 近段时间使用Springboot实现了文件的上传服务,但是在使用python的requests进行post上传时,总是报错. 比如: 1.Current request is not a m ...

  2. springboot项目上传文件出现临时文件目录为空

    最近写文件上传到服务器读取的代码,前端使用FormData上传,服务端用MultipartFile接收,自己测试了下MultipartFile对象有什么东西,结果一般属性都能出来,测试getInput ...

  3. springboot +fastdfs 上传文件到到云服务器

    fastdfs在云服务器的搭建和配置:https://blog.csdn.net/qq_41592652/article/details/104006289 springboot结构如下: appli ...

  4. 二、SpringBoot实现上传文件到fastDFS文件服务器

    上篇文章介绍了如何使用docker安装fastDFS文件服务器,这一篇就介绍整合springBoot实现文件上传到fastDFS文件服务器 1.pom.xml文件添加依赖 <!-- 连接fast ...

  5. springboot 头像上传 文件流保存 文件流返回浏览器查看 区分操作系统 windows 7 or linux

    //我的会员中心 头像上传接口 /*windows 调试*/ @Value("${appImg.location}") private String winPathPic; /*l ...

  6. spring-boot上传文件MultiPartFile获取不到文件问题解决

    1.现象是在spring-boot里加入commons-fileupload jar并且配置了mutilPart的bean,在upload的POST请求后,发现 multipartRequest.ge ...

  7. 基于spring-boot的web应用,ckeditor上传文件图片文件

    说来惭愧,这个应用调试,折腾了我一整天,google了很多帖子,才算整明白,今天在这里做个记录和分享吧,也作为自己后续的参考! 第一步,ckeditor(本博文论及的ckeditor版本4.5.6)的 ...

  8. SpringBoot项目打成jar包后上传文件到服务器 目录与jar包同级问题

    看标题好像很简单的样子,但是针对使用jar包发布SpringBoot项目就不一样了.当你使用tomcat发布项目的时候,上传文件存放会变得非常简单,因为你可以随意操作项目路径下的资源.但是当你使用Sp ...

  9. SpringBoot上传文件到本服务器 目录与jar包同级

    前言 看标题好像很简单的样子,但是针对使用jar包发布SpringBoot项目就不一样了. 当你使用tomcat发布项目的时候,上传文件存放会变得非常简单,因为你可以随意操作项目路径下的资源.但是当你 ...

随机推荐

  1. Java学习笔记(二十一):类型转换和instanceof关键字

    基本数据类型转换: 自动类型转换:把大类型的数据赋值给大类型的变量(此时的大小指的是容量的范围) byte b = 12; //byte是一个字节 int i = b; //int是四个字节 强制类型 ...

  2. DJango 基础(7)

    常用查询字段常用类型与模型关系表 知识点: 常用的查询 Field的常用参数 常用的模型字段类型 常用的查询 获取所有记录:rs = User.objects.all()获取第一条数据:rs = Us ...

  3. HDU-1078.FatMouseandCheese(线性dp + dfs)

    本题大意:在一个n * n的迷宫内进行移动,左上角为初始位置,每次可以走的步数不能超过m,并且每次走的方格上面的数字要大于前一次走的放个数字,不能走到格子外面,问如何能使得到的数字和最大. 本题思路: ...

  4. Linux下所有命令失效的解决方法

    今天在设置环境变量时,一不小心,设置错了,系统中的所有命令全部失效了,可把我急坏了,下面用一条命令可解决: 解决办法:重新设置环境变量PATH export PATH=/usr/sbin:/usr/b ...

  5. wget下载指定URL下的特定属性文件

    例子:下载指定URL下的kernel开头的所有包 wget https://archives.fedoraproject.org/pub/fedora/linux/updates/28/Everyth ...

  6. POJ 3107.Godfather 树形dp

    Godfather Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 7536   Accepted: 2659 Descrip ...

  7. python 03 字符串详解

    1.制表符 \t str.expandtabs(20) 可相当于表格 2.def   isalpha(self) 判断是否值包含字母(汉字也为真),不包含数字 3.def   isdecimal(se ...

  8. FTP服务与配置

    FTP简介 网络文件共享服务主流的主要有三种,分别是ftp.nfs.samba. FTP是File Transfer Protocol(文件传输协议)的简称,用于internet上的控制文件的双向传输 ...

  9. Postman入门使用

    Postman 是一个很强大的 API调试.Http请求的工具,方便易用,毋庸置疑. 1.Postman安装 a. 打开谷歌浏览器 b. 进入设置界面 c. 选择扩展程序 d. 选择chrome网上应 ...

  10. Unity AssetBundle打包资源工具

    using UnityEngine;using System.Collections;using UnityEditor; /// <summary>/// 简单资源打包Editor/// ...