1. 在application配置文件添加图片存储路径的参数
 上传路径前必须加 file:/ 否则网页图片请求可能404
window

gofy:
uploadPath: file:/F:/fileUpload/
imagesPath: F:/fileUpload/
imagesUrl: http://localhost:8888/images/

linux(在根目类home下的fileUpload文件夹):

gofy:
uploadPath: file:/home/fileUpload/
imagesPath: /home/fileUpload/
imagesUrl: http://域名/images/

2. 添加文件上传配置类

/**
* 上传配置类
* 图片放到/F:/fileUpload/后,从磁盘读取的图片数据scr将会变成images/picturename.jpg的格式
*/
@Configuration
public class UploadConfig implements WebMvcConfigurer { /**
* 在配置文件中配置的文件保存路径
*/
@Value("${gofy.uploadPath}")
private String uploadPath; @Override
public void addResourceHandlers(ResourceHandlerRegistry registry) {
if(uploadPath.equals("") || uploadPath.equals("${gofy.imagesPath}")){
String imagesPath = WebMvcConfig.class.getClassLoader().getResource("").getPath();
System.out.print("1.上传配置类imagesPath=="+imagesPath+"\n");
if(imagesPath.indexOf(".jar")>0){
imagesPath = imagesPath.substring(0, imagesPath.indexOf(".jar"));
}else if(imagesPath.indexOf("classes")>0){
imagesPath = "file:"+imagesPath.substring(0, imagesPath.indexOf("classes"));
}
imagesPath = imagesPath.substring(0, imagesPath.lastIndexOf("/"))+"/images/";
uploadPath = imagesPath;
}
//System.out.print("imagesPath============="+mImagesPath+"\n");
//LoggerFactory.getLogger(WebAppConfig.class).info("imagesPath============="+mImagesPath+"\n");
registry.addResourceHandler("/images/**").addResourceLocations(uploadPath);
// TODO Auto-generated method stub
//System.out.print("2.上传配置类mImagesPath=="+mImagesPath+"\n"); WebMvcConfigurer.super.addResourceHandlers(registry);
}
}

3. 添加文件上传的工具类
数据库最好储存动态路径和绝对路径,动态路径用于项目使用,绝对路径便于文件删除

/**
* 文件上传工具类
*/
@Component
public class UploadUtil { @Value("${gofy.imagesPath}")
private String imagesPath;
@Value("${gofy.imagesUrl}")
private String imagesUrl;
/**
* 返回文件保存的路径
* @param file
* @return
*/
private String url;
public Map getFileUrl(MultipartFile file){
Map<String,String> map = new HashMap<String,String>();
System.out.println("上传文件===");
//判断文件是否为空
if(file.isEmpty()){
map.put("error","文件不能为空");
return map;
} //获取文件名
String fileName = file.getOriginalFilename();
System.out.println("上传的文件名为:"+fileName);
//加个时间戳,尽量避免文件名称重复
fileName= new SimpleDateFormat("yyyyMMddHHmmss").format(new Date()) + "_" + fileName;
System.out.println("(加个时间戳,尽量避免文件名称重复)保存的文件名为: "+fileName); //文件绝对路径
String path = imagesPath+fileName;
System.out.println("保存文件的绝对路径"+path); //创建文件路径
File dest = new File(path); //判断文件父目类是否存在
if(!dest.getParentFile().exists()){
dest.getParentFile().mkdir();
} try{
//上传文件
file.transferTo(dest);//保存文件
System.out.println("保存文件路径"+path);
url = imagesUrl+fileName;
System.out.println("保存的完整url==="+url);
}catch (IOException e){
e.printStackTrace();
map.put("error","上传失败");
return map;
}
map.put("url",url);
map.put("path",path);
return map;
}
}

我的个人博客

www.gofy.top

文件上传 Window & Linux的更多相关文章

  1. 《如何将windows上的软件包或文件上传到linux服务上》

    昨天晚上朋友让我帮他简单的搭建个环境,他公司让他做款软件测试温度的,他自己搞的是嵌入式,在公司担任的是软件工程师,应届毕业生.也可能他们搞嵌入式的对这个linux系统不太熟,不会把windows上的软 ...

  2. 将Windows上的文件上传到Linux上

    下载一个SSH Secure Shell Client即可. SSHSecureShellClient-3.2.9下载地址: 免费下载地址在 http://linux.linuxidc.com/ 用户 ...

  3. 通过XShell实现windows文件上传到Linux服务器上

    .XShell上传文件到Linux服务器上 在学习Linux过程中,我们常常需要将本地文件上传到Linux主机上,这里简单记录下使用Xsheel工具进行文件传输 1:首先连接上一台Linux主机 2: ...

  4. 将windows下的文件上传到Linux服务器上

    版权声明:本文为博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明.本文链接:https://blog.csdn.net/lx_Frolf/article/deta ...

  5. xshell如何将Windows文件上传到linux

    1.      首先先将你xshell配置好用户名及密码等,必须使用有权限下载的账号进行操作. 使用 yum provides */rz 这条命令,查看你系统自带的软件包的信息. 2.在输出的信息中可 ...

  6. 中文名文件上传到linux服务器上以后文件名会乱码(openoffice)

    1.中文名文件上传后保存在linux服务器上文件名会乱码,但是我们通过SSH直接对服务器上的一个文件进行重命名是可以使用中文的,而且显示出来是正确的,这说明服务器是可以支持中文的. 2.而为什么上传的 ...

  7. 本地文件上传到Linux服务器

    1.从服务器上下载文件scp username@servername:/path/filename /var/www/local_dir(本地目录) 例如scp root@192.168.0.101: ...

  8. Jenkins使用-windows机器上的文件上传到linux

    一.背景 最近的一个java项目,使用maven作包管理,通过jenkins把编译打包后war部署到另一台linux server上的glassfish(Ver3.1)中,在网上搜索的时候看到有人使用 ...

  9. RPC框架下实现文件上传到linux服务器

    一.前端使用element -ui 的upload组件 :data 表示额外传递的参数, :header 表示设置请求头参数,如,token等, action表示后台api接口的地址 二. conto ...

随机推荐

  1. JZOJ 3526. 【NOIP2013模拟11.7A组】不等式(solve)

    3526. [NOIP2013模拟11.7A组]不等式(solve) (File IO): input:solve.in output:solve.out Time Limits: 1000 ms M ...

  2. javascript的constructor属性介绍

    之前闲来了解了__proto__和prototype的区别,每个对象都有隐私属性__proto__,而prototype是javascript函数特有的属性.那么constructor属性呢?最近是遇 ...

  3. vue的插件使用

    插件通常是为Vue添加全局功能,vue的官网介绍了5中添加插件的方法. vue的插件有个公开方法install.第一个参数是Vue构造器,第二个参数是一个可选的选项对象. 在plugin.js中可以这 ...

  4. python自动化第一课 - python安装以及pycharm配置

    1.安装python 1.1打开python官网https://www.python.org/downloads/windows/进行下载Python 3.8.0 1.2下载完毕后进行安装,1勾选 A ...

  5. C++类的多态

    目录 一.静态多态 二.动态多态 三.虚函数 四.纯虚函数 五.C++ 接口(抽象类) 六.应用经验 七.版权声明 多态按字面的意思就是多种形态.当类之间存在层次结构,并且类之间是通过继承关联时,就可 ...

  6. php通过单例模式使一个类只能创建一个对象。

    单例模式也就是一个类只能创建出一个对象 首先你要知道它的基本思想为:三私一公! 何为三私一公?   1(私).防止用户通过构造方法创建对象,因此私有化构造方法. 2(公).创建一个公共静态函数用来进入 ...

  7. Angular入门之环境搭建(VS code)(转载)

    安装Visual Studio Code VS code和我们常用的VS压根不是一回事,它只是一个开源的轻量级编辑器,而不是IDE,因为支持typescript语法,且插件功能丰富,所以选择 官网下载 ...

  8. Java第一节课考试

    1 package kaoshi; import java.util.Scanner; public class ScoreInformation { Scanner input=new Scanne ...

  9. Python习题集(一)

    每天一习题,提升Python不是问题!!有更简洁的写法请评论告知我! 题目 有一个数据list of dict如下 a = [ {"}, {"}, {"}, ] 写入到本 ...

  10. Vulnhub靶场DC-1 WP

    前言 之前提到过最近在做vlunhub的靶场复现工作,今天开始更新writeup吧.(对着walkthrough一顿乱抄嘻嘻嘻) 关于DC-1(官网翻译来的) 描述 DC-1是一个专门构建的易受攻击的 ...