xl_echo编辑整理,欢迎转载,转载请声明文章来源。欢迎添加echo微信(微信号:t2421499075)交流学习。 百战不败,依不自称常胜,百败不颓,依能奋力前行。——这才是真正的堪称强大!!

---

> 图片上功能有很多的实现,博主这里使用的是vue+iview+springboot实现的。区别于其他图片上传不同的是,这里是开发的时候实际碰到的问题,比如File类型的使用。阅读建议--直接阅读底部最终实现可以快速开发 ### 实际问题的产生 在我们普通图片上传的过程中,我们一般都是使用MultipartFile来进行接收。但是由于业务需求,在我们的部分业务中必须要拿到File类型的文件,不然就没法进行开发。图片上传接受File就成为了这次需求的重点,但是试了很多次,试下你都很复杂。于是便有了一下方案,直接用MultipartFile来接受,但是需要File类型的时候,使用MultipartFile来转换。

### MultipartFile转File核心代码 ```java File file = new File("F:" + "/" + originalFilename); multipart.transferTo(file); ```

> 这里利用的原理很假单,就是从流中读取数据覆盖到file文件中。注意:tranferTo不能读取两次,流中的数据读完之后,流就自动关闭了。需要读取两次,第二次直接在file中去即可。

### 碰到的坑:本地和服务器路径不一样。 简单来说就是系统不一的问题,开发的时候,大多数都用的是windows和mac的系统,这种情况下一般开发可能先考虑本地测试,实现功能为主。但是如果要上到服务器上面,路径的区别问题,导致本地能实现的转换,到服务器就会报错。所以我们需要做系统的识别

### 系统识别代码如下:

```java

String osName = System.getProperty("os.name", "");

if (osName.startsWith("Windows")) {

  System.out.println("当前操作系统为" + osName + "系统--------------------------");

} else if (osName.startsWith("Mac OS")) {

  System.out.println("当前操作系统为" + osName + "系统--------------------------");

} else {

  System.out.println("当前操作系统为" + osName + "系统--------------------------");

}

```

### 碰到的坑: 当如果是linux的时候,可能无法创建文件,没有权限,所以要开通权限。最终实现如下:

```java

public File multipartToFile(MultipartFile multipart) throws IOException {

  String osName = System.getProperty("os.name", "");

  String originalFilename = multipart.getOriginalFilename();

  if (osName.startsWith("Windows")) {

    System.out.println("当前操作系统为" + osName + "系统--------------------------");

    File file = new File("F:" + "/" + originalFilename);

    multipart.transferTo(file); return file;

  } else if (osName.startsWith("Mac OS")) {

    System.out.println("当前操作系统为" + osName + "系统--------------------------");

    File file = new File("/Users/pavankumar/Desktop/" + originalFilename);

    multipart.transferTo(file); return file;

   } else {

    System.out.println("当前操作系统为" + osName + "系统--------------------------");

    File file=new File("/usr/local/java/" + originalFilename);

    file.setWritable(true, false);

    multipart.transferTo(file); return file;

   }

}

```

欢迎添加微信交流学习

---

![图片1](https://img2018.cnblogs.com/blog/1472376/201908/1472376-20190805101349042-874117020.png)

图片上传怎么用File接受文件的更多相关文章

  1. Jquery图片上传组件,支持多文件上传

    Jquery图片上传组件,支持多文件上传http://www.jq22.com/jquery-info230jQuery File Upload 是一个Jquery图片上传组件,支持多文件上传.取消. ...

  2. 链接ftp,把文件或图片上传到ftp指定的文件夹中

    /******************************************************************** *  * * Filename : .java * Auth ...

  3. 图片上传利用request.getInputStream()获取文件流时遇到的问题

    图片上传功能是我们web里面经常用到的,获得的方式也有很多种,这里我用的是request.getInputStream()获取文件流的方式.想要获取文件流有两种方式,附上代码 int length = ...

  4. spring boot图片上传至远程服务器并返回新的图片路径

    界面上传图片时考虑到可能会有用户的图片名称一致,使用UUID来对图片名称进行重新生成. //UUIDUtils public class UUIDUtils { public static Strin ...

  5. input file 图片上传

    使用第三方:jquery.ajaxfileupload.jsinput中的name根据后端来定 <form method="post" enctype="multi ...

  6. golang学习之beego框架配合easyui实现增删改查及图片上传

    golang学习之beego框架配合easyui实现增删改查及图片上传 demo目录: upload文件夹主要放置上传的头像文件,main是主文件,所有效果如下: 主页面: 具体代码: <!DO ...

  7. PHP+js实现图片上传,编辑

    文件上传,点击按钮并选择文件后,文件会临时存到一个位置,会有一个临时名字: 然后在php文件中处理,给文件起名并将文件从临时为止搬到服务器,把需要的文件信息返回给前端页面: 最后表单提交时,把文件信息 ...

  8. SpringBoot图片上传(五) 上一篇的新版本,样式修改后的

    简单描述:一次上传N张图片(N可自定义):上传完后图片回显,鼠标放到已经上传的图片上后,显示删除,点击后可以删除图片,鼠标离开后,图片恢复. 效果:一次上传多个图片后的效果 上传成功: 鼠标悬浮到图片 ...

  9. SpringBoot图片上传(四) 一个input上传N张图,支持各种类型

    简单介绍:需求上让实现,图片上传,并且可以一次上传9张图,图片格式还有要求,网上找了一个测试了下,好用,不过也得改,仅仅是实现了功能,其他不尽合理的地方,还需自己打磨. 代码: //html<d ...

随机推荐

  1. Mac OS docker挂载文件夹

    sudo docker run -p 3306:3306 --name mysql -v /var/run/docker.sock:/var/run/docker.sock -v ~/mysql/co ...

  2. ionic生命周期函数

    Ionic4中的生命周期函数和angualr7基本是一样的,下面我们看看Ionic4中的生命周期函数,以及生命周期函数的用法. Ionic4中内置的生命周期函数: ionViewWillEnter — ...

  3. openresty开发系列11--openresty的api入门

    openresty开发系列11--openresty的api入门 1)ngx_lua模块的hello world编辑nginx下conf配置文件nginx.conf# vi nginx.conf在se ...

  4. 中标麒麟QT5编译出现:cannot find -lGL 和 collect2:error:ld returned 1 exit status 错误

    sudo yum install mesa-libGL-devel mesa-libGLU-devel

  5. 让Chrome浏览器抓包接口数据秒变 python 代码

    简介 uncurl是一个库,允许您将curl请求转换为使用requests 的python代码.由于Chrome网络检查器具有的“copy as cURL”,因此该工具对于用python重新创建浏览器 ...

  6. 【ARTS】01_43_左耳听风-201900902~201900908

    ARTS: Algrothm: leetcode算法题目 Review: 阅读并且点评一篇英文技术文章 Tip/Techni: 学习一个技术技巧 Share: 分享一篇有观点和思考的技术文章 Algo ...

  7. H310C,B365,M.2 NVME SSD,USB3.0,安装 WIN7 64 位

    华擎H310CM ITX NVME SSD 上安装WIN7 64位 核心关键点:xHCI USB3.0驱动,nvme驱动,nvme win7补丁. 硬件配置:I5 9400F, 华擎H310CM IT ...

  8. Jupyter notbook 修改默认路径

    打开 cmd 输入命令 jupyter notebook --generate-config  2.打开配置文件  3.修改路径  转自: https://blog.csdn.net/zw__chen ...

  9. 一个容器多个进程,一个pod多个容器

    一个容器多个进程:在Docker的镜像编译脚本Dockerfile中带起多个进程,如下可以在contivNet.sh中启动多个进程 FROM 10.37.210.125:5001/suning/cen ...

  10. ipad 如何 Airplay 到 Windows 上?

    最近刚好有用到这个,觉得还不错,就推荐给大家.虽然个人并不喜欢苹果这一套,但是工作里难免掺杂一些会用到的ipad , mac . 纯粹技术分享. 1. 5KPlayer : https://www.5 ...