使用JAVA文件上传的几种方式
文章目录
- 通过文件地址上传文件
- 通过文件传入并存放服务器
- 上传并生成随即名
- 以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文件上传的几种方式相关推荐
- 文件上传的三种方式-Java
前言:负责,因为该项目他(jetty嵌入式开始SpringMvc)实现文件上传的必要性,并拥有java文件上传这一块还没有被曝光.并 Http 更多晦涩协议.因此,这种渐进的方式来学习和实践上载文件的 ...
- 原生态的ajax如何上传文件,原生ajax和iframe框架实现图片文件上传的两种方式
大家应该可以举出几种常用的异步文件上传功能的实现方式,使用频率较多的有原生ajax和iframe框架,实现图片文件上传,下面就为大家分享图片文件上传的两种方式:原生ajax和iframe框架,供大家参 ...
- Android 文件上传的几种方式
这两天和新来的同事做一个项目,用到了文件上传,在这里记录下历程 Android文件上传有各种各样的Http框架,我也就简单说说我常用的吧,LiteHttp,OkHttp的封装还没做完全,有时间会补上, ...
- python实现selenium文件上传的两种方式
方法一.input标签上传 如果是input标签,可以直接输入路径,那么可以直接调用send_keys输入路径. 方法二.非input标签上传 这种上传方式需要借助第三方工具,主要有以下三种情 ...
- HTML5 文件上传的2种方式
原文地址:http://blog.csdn.net/lovelyelfpop/article/details/71421123 以前上传文件需要提交Form表单. HTML5方式上传文件,可以通过使用 ...
- 大文件上传 问题解决三种方案
最近遇见一个需要上传百兆大文件的需求,调研了七牛和腾讯云的切片分段上传功能,因此在此整理前端大文件上传相关功能的实现. 在某些业务中,大文件上传是一个比较重要的交互场景,如上传入库比较大的Excel表 ...
- Java文件上传大杀器-绕waf(针对commons-fileupload组件)
Java文件上传大杀器-绕waf(针对commons-fileupload组件) Ps:高版本才有1.3以上 来个中二的标题,哈哈哈,灵感来源于昨晚赛博群有个师傅@我是killer发了篇新文章,在那篇 ...
- JavaBean实现多个文件上传的两种方法
JavaBean实现多个文件上传的两种方法 王新芳 刘杰 北京工商大学计算机学院 摘要:本文介绍了JavaBean实现多个文件上传的两种方法,分别是使用http协议和ftp协议实现.首先 ...
- java文件上传到云服务器,java文件上传到云服务器
java文件上传到云服务器 内容精选 换一换 当用户拥有Linux操作系统的外部镜像文件,且类型及操作系统符合外部镜像文件格式和操作系统类型要求时,用户可以将外部镜像文件创建为Linux系统盘镜像. ...
- java 文件上传 servlet_java文件上传-原始的Servlet方式
前言: 干了这几个项目,也做过几次文件上传下载,要么是copy项目以前的代码,要么是百度的,虽然做出来了,但学习一下原理弄透彻还是很有必要的.刚出去转了一圈看周围有没有租房的,在北京出去找房子是心里感 ...
最新文章
- kali win10双系统_kali 双系统+实体机(win10+kali)
- 乾颐堂军哥HCIE5-OSPF的NSSA区域细节和中间系统到中间系统基础
- CodeForces 768E Game of Stones 打表找规律
- 我玩《王者荣耀》、斗地主、打麻将,但我是正经搞AI的北大教授
- Linux的磁盘满了
- 服务器充电桩是什么显示,请教一个问题,高速公路上一个服务区一般会设置几个充电站呢...
- vim 代码注释插件
- c# winform 打包(带数据库安装)
- 高校教师抄袭豆瓣博主文章,学校证实:基本属实!记过并调离教学科研岗位...
- 微信公众账户模拟登陆后的一系列操作
- 学以致用,Python定时采集微博评论
- Vue首屏加载白屏问题及解决方案
- pycharm更改默认项目地址的方法
- Java input char_java.util.regex.Pattern.matcher(CharSequence input)方法
- 移植sqlite3到arm-linux上(AM3352)
- 加密系列 | SHA加密和解密算法详解代码示例
- iOS 编译器__Attribute__的入门指南
- c# u盘使用记录_C# 监测U盘插入与拔出事件
- Scrum 项目 3.0
- Spring官网阅读(四)BeanDefinition(上)
热门文章
- Ubuntu 开机自动运行命令或程序
- 我用一根网线,制霸了宿舍的网络!
- Ubuntu下编译vtk(java版本)【超详细-带过程截图】
- mysql数据库修复工具 innodb表数据恢复 ibd文件恢复工具
- IOS校园网破解更新了
- Android 应用开发---TextView(文本框)详解
- sqlite3数据库函数
- 利用com.googlecode.libphonenumber解析手机号归属地
- google code 代码托管 用git创建仓库
- 东芝2510ac请求维修cd40_TOSHIBA东芝2510复印机维修资料