springboot 头像上传 文件流保存 文件流返回浏览器查看 区分操作系统 windows 7 or linux
//我的会员中心 头像上传接口
/*windows 调试*/
@Value("${appImg.location}")
private String winPathPic;
/*linux 使用*/
@Value("${img.location}")
private String linuxPathPic; @PostMapping(value = "/file")
public String file() {
return "file";
} @ApiOperation(value = "会员头像文件上传")
@ApiImplicitParams({
})
@RequestMapping(value = "/appMbrImgUploadFile", method = RequestMethod.POST)
@ResponseBody
public Object appMbrImgUploadFile(@RequestParam(value = "file") MultipartFile file, HttpServletRequest request) {
Subject currentUser = SecurityUtils.getSubject();
ShiroUser shiroUser = null;
Session session = currentUser.getSession();
String mobile = session.getAttribute("username") == null ? "" : String.valueOf(session.getAttribute("username"));
if (mobile.equals("")) {
return setModelMap(new ModelMap(), HttpCode.EFFECT_OF_TOKEN.value(), "token已经失效,请登录", null);
}
SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd");
//时间路径
String fileTime = sdf.format(new Date());
// 文件名
String fileName = file.getOriginalFilename();
// 后缀名
String suffixName = fileName.substring(fileName.lastIndexOf("."));
//图片格式校验
String reg = "(.png)$";
Pattern pattern = Pattern.compile(reg);
Matcher matcher = pattern.matcher(suffixName);
boolean valiRst = matcher.find();
if (!valiRst) {
return setModelMap(new ModelMap(), HttpCode.PICTURE_FORMAT_CHECK_EXCEPTION.value(), "图片格式异常", null);
}
if (file.isEmpty()) {
System.out.println("文件为空");
logger.error("文件流为空异常");
return setModelMap(new ModelMap(), HttpCode.FILE_STREAM_EMPTY.value(), "文件流为空异常", null);
}
//判断操作系统
String os = System.getProperty("os.name");
System.out.println(os);
//定义路径
String picPathReal="";
if(os!=null&&os.contains("Windows 7")){
System.out.println("Windows 7");
picPathReal=winPathPic;
}else{
//linux
picPathReal=linuxPathPic;
}
// 新文件名
fileName = UUID.randomUUID() + suffixName;
// 文件目录
String diectFile=picPathReal+"/"+fileTime;
File dest = new File(diectFile);
dest.setWritable( true, false);
if (!dest.exists()) {
dest.mkdirs();
}
//创建文件 图片
File filePic = new File(diectFile+File.separator, fileName);
try {
file.transferTo(filePic);
} catch (IOException e) {
e.printStackTrace();
}
LSysMember sysMember = new LSysMember();
LSysMemberVo userInfo = new LSysMemberVo();
//返回指定图片文件路径 完整接口地址
//保存地址处理
String savePath="/lSysMember/noLogin/readImageFile?url="+picPathReal+File.separator+fileTime+File.separator+fileName;
//String filename = "/lSysMember/noLogin/readImageFile?url="+savePath+File.separator + fileTime + File.separator + fileName;
//查询会员基本信息
sysMember = memberService.findLoginMemberInfo(mobile);
//执行更新头像更新操作
sysMember.setAvatar(savePath);
try {
sysMember = memberService.appMbrImgUploadFile(sysMember);
userInfo = memberService.findLoginMemberInfoByMobile(mobile);
} catch (Exception e) {
logger.error("请求异常----", e);
throw new CallChainException();
}
//更新session
session.setAttribute("shiroUser", userInfo);
return setSuccessModelMap(savePath);
} @ApiOperation(value = "返回指定地址的文件流")
@ApiImplicitParams({
@ApiImplicitParam(name = "url", value = "图片地址", required = true,
paramType = "query", defaultValue = "\\20180912\\7cd2e1a3-a087-4e25-aac8-2bdf8e274c6f.png"),
})
@RequestMapping(value = "/noLogin/readImageFile",method =RequestMethod.GET)
@ResponseBody
public void getUrlFile(String url, HttpServletRequest request, HttpServletResponse response) {
File file = new File(url);
// 后缀名
String suffixName = url.substring(url.lastIndexOf("."));
//判断文件是否存在如果不存在就返回默认图标
if (!(file.exists() && file.canRead())) {
file = new File(request.getSession().getServletContext().getRealPath("/")
+ "resource/icons/auth/root.png");
}
FileInputStream inputStream = null;
try {
inputStream = new FileInputStream(file);
byte[] data = new byte[(int) file.length()];
int length = inputStream.read(data);
inputStream.close();
//setContentType("text/plain; charset=utf-8"); 文本
response.setContentType("image/png;charset=utf-8");
OutputStream stream = response.getOutputStream();
stream.write(data);
stream.flush();
stream.close();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
来源: https://www.cnblogs.com/javajetty/p/9655612.html
http://www.bubuko.com/infodetail-2366518.html
springboot 头像上传 文件流保存 文件流返回浏览器查看 区分操作系统 windows 7 or linux的更多相关文章
- java导出excel并且压缩成zip上传到oss,并下载,使用字节流去存储,不用文件流保存文件到本地
最近项目上要求实现导出excel并根据条数做分割,然后将分割后的多个excel打包成压缩包上传到oss服务器上,然后提供下载方法,具体代码如下:这里只展示部分代码,获取数据的代码就不展示了 ByteA ...
- SpringBoot - 实现文件上传2(多文件上传、常用上传参数配置)
在前文中我介绍了 Spring Boot 项目如何实现单文件上传,而多文件上传逻辑和单文件上传基本一致,下面通过样例进行演示. 多文件上传 1,代码编写 1)首先在 static 目录中创建一个 up ...
- vue头像上传与文件压缩
工作中遇到的问题记录:vue开发头像上传组件,后端提供接口,需求为可相册上传,可相机拍摄上传,文件大小限制为2M 需求点分析 移动端调用相册/摄像头实现拍照 图片压缩,当前高像素的相机拍出来的图片都有 ...
- Html5实现头像上传和编辑,保存为Base64的图片过程
一.Html5实现头像上传和编辑 插件地址: html5手机端裁剪图片上传头像代码 本地项目引入注意事项: 1.将html的js搬到外面的js文件中,便于管理 2.图片样式在html都是在页面写死,需 ...
- Android连接socket服务器上传下载多个文件
android连接socket服务器上传下载多个文件1.socket服务端SocketServer.java public class SocketServer { ;// 端口号,必须与客户端一致 ...
- PHP上传(单个)文件示例
通过 PHP,可以把文件上传到服务器. 创建一个文件上传表单 允许用户从表单上传文件是非常有用的. 请看下面这个供上传文件的 HTML 表单: <html> <body> &l ...
- 聊一聊jquery文件上传(支持多文件上传)
谈到文件上传,现在一般都用现成的组件可以使用.PC端的可以使用uploadify.针对微网站H5也有uploadifive.但是这组件并不能满足各种场景的需求,例如:预览 切图 放大缩小,取消之类的. ...
- SharePoint 2010 ——自定义上传页面与多文件上传解决方案
最近项目遇到一个很麻烦的问题,原以为很容易解决,结果搞了那么久,先开个头,再慢慢写 SharePoint 2010 ——自定义上传页面与多文件上传解决方案 1.创建Sharepoint空白项目,创建应 ...
- .Net neatupload上传控件实现文件上传的进度条
1. 引入bin文件 (可以到neatupload官网下载,也可以到教育厅申报系统中找) 2. 将控件加入到工具栏,在工具栏中点鼠标右键,如图: 3. 加入neatuplaod这个文件夹(可以到nea ...
随机推荐
- scrapy爬虫事件以及数据保存为txt,json,mysql
今天要爬取的网页是虎嗅网 我们将完成如下几个步骤: 创建一个新的Scrapy工程 定义你所需要要抽取的Item对象 编写一个spider来爬取某个网站并提取出所有的Item对象 编写一个Item Pi ...
- C# 单例模式(Singleton)
摘要 在我们日常的工作中经常需要在应用程序中保持一个唯一的实例,如:IO处理,数据库操作等,由于这些对象都要占用重要的系统资源,所以我们必须限制这些实例的创建或始终使用一个公用的实例,这就是我们今天要 ...
- 关于linq to sql调用存储过程,出现"无法枚举查询结果多次"的问题
DBML: [Function(Name="dbo.p_GetStudyStageSubjectGroup")] public ISingleResult<STUDYSTAG ...
- python文件操作os模块
Python 统计某一文件夹下文件数量 使用python pathlib模块 from pathlib import Path dir_path = ' ' print(len(list(Path( ...
- Java之enum
枚举是 JDK 1.5 中引入的新特性,存放在 java.lang 包中.在没有枚举之前都是直接定义一个final string这种,有了枚举之后可以直接定义啦,不过在java中需要自定义转换,自己 ...
- ios系统架构及常用框架
1.iOS基于UNIX系统,因此从系统的稳定性上来说它要比其他操作系统的产品好很多 2.iOS的系统架构分为四层,由上到下一次为:可触摸层(Cocoa Touch layer).媒体层(Media l ...
- jmeter接口测试注意点
1:许多接口访问前会鉴权,不能直接访问.需要给线程组加上cookies管理. 2:第二个接口的入参是第一个接口的返回,需要先调第一个接口,在第一个接口后加后置处理器,如正则表达式提取器,提取参数供后面 ...
- WPF 实现INotifyPropertyChanged .Net Framework 4.5
自己动手写了一个基类来实现INotifyPropertyChanged接口,以后可以直接使用. using System.ComponentModel; using System.Runtime.Co ...
- python基本算法
算法优劣评判标准 时间复杂度: 定义:用来评估算法运行效率的一个式子 print('Hello World') O(1) for i in range(n): print('Hello World') ...
- 多进程《三》join方法
一 Process对象的join方法 在主进程运行过程中如果想并发地执行其他的任务,我们可以开启子进程,此时主进程的任务与子进程的任务分两种情况 情况一:在主进程的任务与子进程的任务彼此独立的情况下, ...