文章目录

  • 通过文件地址上传文件
  • 通过文件传入并存放服务器
  • 上传并生成随即名
  • 以base64编码上传文件
  • 上传附件的接口如下

通过文件地址上传文件

1、webUtil工具类下载图片如下

public static void downloadImgByNet(String ServerfilePath,String filePath,String fileName){try{URL url = new URL(ServerfilePath);URLConnection conn = url.openConnection();//设置超时间为3秒conn.setConnectTimeout(3*1000);//防止屏蔽程序抓取而返回403错误conn.setRequestProperty("User-Agent", "Mozilla/4.0 (compatible; MSIE 5.0; Windows NT; DigExt)");//输出流InputStream str = conn.getInputStream();//控制流的大小为1kbyte[] bs = new byte[1024];//读取到的长度int len = 0;//是否需要创建文件夹File saveDir = new File(filePath);if(!saveDir.exists()){saveDir.mkdir();}File file = new File(saveDir+ File.separator+fileName);//实例输出一个对象FileOutputStream out = new FileOutputStream(file);//循环判断,如果读取的个数b为空了,则is.read()方法返回-1,具体请参考InputStream的read();while ((len = str.read(bs)) != -1) {//将对象写入到对应的文件中out.write(bs, 0, len);}//刷新流out.flush();//关闭流out.close();str.close();System.out.println("下载成功");}catch (Exception e) {e.printStackTrace();}}

** 2、上传图片接口**

@Value("${uploadfile.fileLoadPath}")String fileLoadPath="E:\\test";@RequestMapping(method = RequestMethod.POST, value = "/fileUpload")public void ChangeState(@RequestBody Map param, HttpServletRequest request,HttpServletResponse response){String UploadfilePath="";if (param.get("UploadfilePath")!=null){UploadfilePath=param.get("UploadfilePath").toString();}String fileName="";if (param.get("fileName")!=null){fileName=param.get("fileName").toString();}WebUtil.downloadImgByNet(UploadfilePath,fileLoadPath,fileName);}

通过文件传入并存放服务器

@Value("${uploadfile.fileLoadPath}")String fileLoadPath="E:\\test";/*** 文件的上传* @param file* @return*/@RequestMapping(value = "/uploads",method = RequestMethod.POST)public void upload(@RequestParam("file") MultipartFile file, HttpServletResponse response) {// 判断文件是否为空String path = fileLoadPath;HashMap<String, String> message = new HashMap<>();if (!file.isEmpty()) {try {// 文件保存路径String filePath = path + "/" + file.getOriginalFilename();if (!new File(filePath).exists()){new File(filePath).mkdirs();}// 转存文件file.transferTo(new File(filePath));message.put("status", filePath);} catch (Exception e) {//                e.printStackTrace();message.put("status", "error");}}renderResult(response, message);}

上传并生成随即名

@Value("${uploadfile.fileLoadPath}")String fileLoadPath="E:\\test";/*** 文件的上传* @param file* @return*/@RequestMapping(value = "/upload",method = RequestMethod.POST)public void upload(@RequestParam("file") MultipartFile file, HttpServletResponse response) {// 判断文件是否为空String path = fileLoadPath;HashMap<String, String> message = new HashMap<>();if (!file.isEmpty()) {try {// 文件保存路径
//                String filePath = path + "/" + file.getOriginalFilename();String suffixName = file.getOriginalFilename().substring(file.getOriginalFilename().lastIndexOf("."));      //获取文件的后缀名String filePath = path+"\\"+UUID.randomUUID().toString().replace("-","")+suffixName;        //拼接if (!new File(filePath).exists()){new File(filePath).mkdirs();}// 转存文件file.transferTo(new File(filePath));message.put("status", filePath);} catch (Exception e) {//                e.printStackTrace();message.put("status", "error");}}renderResult(response, message);}

以base64编码上传文件

以下为base64的编码和解码的工具类

public class FileBase64Utils {/*** 本地文件(图片、excel等)转换成Base64字符串** @param file      接受的文件*/public static String convertFileToBase64(MultipartFile file) {byte[] data = null;// 读取图片字节数组try {InputStream in = file.getInputStream();
//            InputStream in = new FileInputStream(imgPath);System.out.println("文件大小(字节)=" + in.available());data = new byte[in.available()];in.read(data);in.close();} catch (IOException e) {e.printStackTrace();}// 对字节数组进行Base64编码,得到Base64编码的字符串Base64.Decoder decoder = Base64.getDecoder();Base64.Encoder encoder = Base64.getEncoder();String base64Str = encoder.encodeToString(data);return base64Str;}/*** 将base64字符串,生成文件*/public static File convertBase64ToFile(String fileBase64String, String filePath, String fileName) {BufferedOutputStream bos = null;FileOutputStream fos = null;File file = null;try {File dir = new File(filePath);if (!dir.exists() && dir.isDirectory()) {//判断文件目录是否存在dir.mkdirs();}Base64.Decoder decoder = Base64.getDecoder();Base64.Encoder encoder = Base64.getEncoder();
//            BASE64Decoder decoder = new BASE64Decoder();byte[] bfile = decoder.decode(fileBase64String);file = new File(filePath + File.separator + fileName);fos = new FileOutputStream(file);bos = new BufferedOutputStream(fos);bos.write(bfile);return file;} catch (Exception e) {e.printStackTrace();return null;} finally {if (bos != null) {try {bos.close();} catch (IOException e1) {e1.printStackTrace();}}if (fos != null) {try {fos.close();} catch (IOException e1) {e1.printStackTrace();}}}}
}

上传附件的接口如下

/*** 附件上传接口* @param request* @param response* @param file      前端传来的附件*/@RequestMapping(method = RequestMethod.POST, value = "/uploadFile")public void uploadFile(HttpServletRequest request,HttpServletResponse response,  MultipartFile file){Map<String,Object> res = new HashMap<String, Object>();try{long start = System.currentTimeMillis();        //获取开始的时间String filename = file.getOriginalFilename();       //获取文件名String imgBase64Str = FileBase64Utils.convertFileToBase64(file);   //使用base64对文件编码成字符串格式System.out.println("Base64字符串length=" + imgBase64Str.length());     //得到编码后的长度
//            如果文件不存在,则创建if (!new File(ServerloadPath).exists()){new File(ServerloadPath).mkdirs();}
//            重新将字符串解码为文件类型并上传File file1 = FileBase64Utils.convertBase64ToFile(imgBase64Str, ServerloadPath, filename);assert file1 != null;String absolutePath = file1.getAbsolutePath();
//            输入花费时间System.out.println("duration:" + (System.currentTimeMillis() - start));
//            返回存放地址res.put("filePath", absolutePath);res.put("duration",System.currentTimeMillis() - start+"ms");renderResult(response, res);}catch(Exception ex){ex.printStackTrace();}}

如有不对的地方,欢迎指点

使用JAVA文件上传的几种方式相关推荐

  1. 文件上传的三种方式-Java

    前言:负责,因为该项目他(jetty嵌入式开始SpringMvc)实现文件上传的必要性,并拥有java文件上传这一块还没有被曝光.并 Http 更多晦涩协议.因此,这种渐进的方式来学习和实践上载文件的 ...

  2. 原生态的ajax如何上传文件,原生ajax和iframe框架实现图片文件上传的两种方式

    大家应该可以举出几种常用的异步文件上传功能的实现方式,使用频率较多的有原生ajax和iframe框架,实现图片文件上传,下面就为大家分享图片文件上传的两种方式:原生ajax和iframe框架,供大家参 ...

  3. Android 文件上传的几种方式

    这两天和新来的同事做一个项目,用到了文件上传,在这里记录下历程 Android文件上传有各种各样的Http框架,我也就简单说说我常用的吧,LiteHttp,OkHttp的封装还没做完全,有时间会补上, ...

  4. python实现selenium文件上传的两种方式

    方法一.input标签上传     如果是input标签,可以直接输入路径,那么可以直接调用send_keys输入路径. 方法二.非input标签上传 这种上传方式需要借助第三方工具,主要有以下三种情 ...

  5. HTML5 文件上传的2种方式

    原文地址:http://blog.csdn.net/lovelyelfpop/article/details/71421123 以前上传文件需要提交Form表单. HTML5方式上传文件,可以通过使用 ...

  6. 大文件上传 问题解决三种方案

    最近遇见一个需要上传百兆大文件的需求,调研了七牛和腾讯云的切片分段上传功能,因此在此整理前端大文件上传相关功能的实现. 在某些业务中,大文件上传是一个比较重要的交互场景,如上传入库比较大的Excel表 ...

  7. Java文件上传大杀器-绕waf(针对commons-fileupload组件)

    Java文件上传大杀器-绕waf(针对commons-fileupload组件) Ps:高版本才有1.3以上 来个中二的标题,哈哈哈,灵感来源于昨晚赛博群有个师傅@我是killer发了篇新文章,在那篇 ...

  8. JavaBean实现多个文件上传的两种方法

    JavaBean实现多个文件上传的两种方法 王新芳        刘杰 北京工商大学计算机学院 摘要:本文介绍了JavaBean实现多个文件上传的两种方法,分别是使用http协议和ftp协议实现.首先 ...

  9. java文件上传到云服务器,java文件上传到云服务器

    java文件上传到云服务器 内容精选 换一换 当用户拥有Linux操作系统的外部镜像文件,且类型及操作系统符合外部镜像文件格式和操作系统类型要求时,用户可以将外部镜像文件创建为Linux系统盘镜像. ...

  10. java 文件上传 servlet_java文件上传-原始的Servlet方式

    前言: 干了这几个项目,也做过几次文件上传下载,要么是copy项目以前的代码,要么是百度的,虽然做出来了,但学习一下原理弄透彻还是很有必要的.刚出去转了一圈看周围有没有租房的,在北京出去找房子是心里感 ...

最新文章

  1. kali win10双系统_kali 双系统+实体机(win10+kali)
  2. 乾颐堂军哥HCIE5-OSPF的NSSA区域细节和中间系统到中间系统基础
  3. CodeForces 768E Game of Stones 打表找规律
  4. 我玩《王者荣耀》、斗地主、打麻将,但我是正经搞AI的北大教授
  5. Linux的磁盘满了
  6. 服务器充电桩是什么显示,请教一个问题,高速公路上一个服务区一般会设置几个充电站呢...
  7. vim 代码注释插件
  8. c# winform 打包(带数据库安装)
  9. 高校教师抄袭豆瓣博主文章,学校证实:基本属实!记过并调离教学科研岗位...
  10. 微信公众账户模拟登陆后的一系列操作
  11. 学以致用,Python定时采集微博评论
  12. Vue首屏加载白屏问题及解决方案
  13. pycharm更改默认项目地址的方法
  14. Java input char_java.util.regex.Pattern.matcher(CharSequence input)方法
  15. 移植sqlite3到arm-linux上(AM3352)
  16. 加密系列 | SHA加密和解密算法详解代码示例
  17. iOS 编译器__Attribute__的入门指南
  18. c# u盘使用记录_C# 监测U盘插入与拔出事件
  19. Scrum 项目 3.0
  20. Spring官网阅读(四)BeanDefinition(上)

热门文章

  1. Ubuntu 开机自动运行命令或程序
  2. 我用一根网线,制霸了宿舍的网络!
  3. Ubuntu下编译vtk(java版本)【超详细-带过程截图】
  4. mysql数据库修复工具 innodb表数据恢复 ibd文件恢复工具
  5. IOS校园网破解更新了
  6. Android 应用开发---TextView(文本框)详解
  7. sqlite3数据库函数
  8. 利用com.googlecode.libphonenumber解析手机号归属地
  9. google code 代码托管 用git创建仓库
  10. 东芝2510ac请求维修cd40_TOSHIBA东芝2510复印机维修资料