学了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. ASP 错误捕捉,处理

    Asp利用 On Error Resume Next捕捉异常,根据Err.Number判断是否有错误 注:On Error Goto 0取消捕捉异常 模板文件页面 <% Response.Buf ...

  2. IPV4/IPV6双协议栈配置案例

    拓扑: XRV1配置: =================================================================== hostname XRV1! ipv6 ...

  3. Django的rest_framework的视图之基于通用类编写视图源码解析

    我们上一篇博客讲解了如何使用mixins类实现rest_framework的视图,但是其中有很多的冗余的代码,我们这边在来优化一下 1.queryset的视图函数 首先看下对queryset操作的视图 ...

  4. linux下的音量控制器alsamixer 桌面v7

    转载 http://blog.sina.com.cn/s/blog_0ca103850102vpml.html 耳机 插后边 line out 耳机插前边 模拟耳机 声卡自带工具 linux下的音量控 ...

  5. 符合Chrome58的证书制作

    Chrome 58开始取消了对通用名检查的支持, 但网上大多数OpenSSL使用教程没有提及这一点, 制作出的证书总是提示ERR_CERT_COMMON_NAME_INVALID 错误, 所以分享出解 ...

  6. Chapter3_操作符_逻辑操作符

    逻辑操作符与(&&)或(||)非(^)能够对布尔类型的数据类型进行操作,并且生成布尔值,和关系操作符的产生的数据类型是一样的.需要注意的不多,有以下几点: (1)在需要使用string ...

  7. python class中__init__函数、self

    class中包含类内变量以及方法 __init__方法 其前面带有”__“,故此函数被声明为私有方法,不可类外调用. 此方法可以带参数初始化 此方法的首参数必须是”self“(不过”self“也可以换 ...

  8. 【慕课网实战】Spark Streaming实时流处理项目实战笔记十六之铭文升级版

    铭文一级: linux crontab 网站:http://tool.lu/crontab 每一分钟执行一次的crontab表达式: */1 * * * * crontab -e */1 * * * ...

  9. Authorization Security for Mongodb

    To keep security for the mongodb server, we can create an authorized machanism. db.createUser( { use ...

  10. 【git 报错】Could not read from remote repository.Please make sure you have the correct access rights.

    我们在使用git clone 或其他命令的时候,有时候会遇到这类问题,如图: and the repository exists. fatal: Could not read from remote ...