Java实现的文件上传下载工具类完整实例【上传文件自动命名】

网友投稿 495 2023-03-15


Java实现的文件上传下载工具类完整实例【上传文件自动命名】

本文实例讲述了java实现的文件上传下载工具类。分享给大家供大家参考,具体如下:

这是一个在Eclipse环境下采用Java语言实现文件上传下载的工具类。和之前介绍的C#文件上传下载工具类一样,在上传时,为避免文件名在服务器中重复,采用“服务器时间(定义到毫秒)+文件名+文件后缀“的方式作为服务器上的文件名;下载过程中利用 spring mvc ResponseEntity 做文件下载,返回的是字节流,下载成功后可自定义文件的保存路径。

具体源码如下所示:

package com.utils;

import java.io.File;

import java.io.IOException;

import java.io.InputStream;

import java.io.UnsupportedEncodingException;

import java.text.SimpleDateFormat;

import java.util.Date;

import org.apache.commons.io.FileUtils;

import org.springframework.http.HttpHeaders;

import org.springframework.http.HttpStatus;

import org.springframework.http.MediaType;

import org.springframework.http.ResponseEntity;

/**

* 文件上传下载工具类

*

*/

public class FileHelper {

/**

* 根据路径确定目录,没有目录,则创建目录

*

* @param path

*/

private static void createDir(String path) {

File fileDir = new File(path);

if (!fileDir.exists() && !fileDir.isDirectory()) {// 判断/download目录是否存在

fileDir.mkdir();// 创建目录

}

}

/**

* 将文件名解析成文件的上传路径

*

* @param fileName

* @return 上传到服务器的文件名

*/

public static String transPath(String fileName, String path) {

createDir(path);

Date date = new Date();

SimpleDateFormat dateformat = new SimpleDateFormat("yyyyMMddhhmmssSSS");// 定义到毫秒

String nowStr = dateformat.format(date);

String filenameStr = fileName.substring(0, fileName.lastIndexOf("."));// 去掉后缀的文件名

String suffix = fileName.substring(fileName.lastIndexOf(".") + 1);// 后缀

if (fileName.trim() != "") {// 如果名称不为"",说明该文件存在,否则说明该文件不存在

path += "\\" + filenameStr + nowStr + "." + suffix;// 定义上传路径

}

return path;

}

/**

* 提醒文件下载

*

* @param fileName

* @param path

* @return

*/

public static ResponseEntity downloadFile(String fileName, String path) {

try {

fileName = new String(fileName.getBytes("GB2312"), "ISO_8859_1");// 避免文件名中文不显示

} catch (UnsupportedEncodingException e1) {

e1.printStackTrace();

}

File file = new File(path);

HttpHeaders headers = new HttpHeaders();

headers.setContentType(MediaType.APPLICATION_OCTET_STREAM);

headers.setContentDispositionFormData("attachment", fileName);

ResponseEntity byteArr = null;

try {

byteArr = new ResponseEntity(FileUtils.readFileToByteArray(file), headers, HttpStatus.OK);

} catch (IOException e) {

e.printStackTrace();

}

return byteArr;

}

/**

* 将输入流中的数据写入字节数组

*

* @param in

* @return

*/

public static byte[] inputStream2ByteArray(InputStream in, boolean isClose) {

byte[] byteArray = null;

try {

int total = in.available();

byteArray = new byte[total];

in.read(byteArray);

} catch (IOException e) {

e.printStackTrace();

} finally {

if (isClose) {

try {

in.close();

} catch (Exception e2) {

System.out.println("关闭流失败");

}

}

}

return byteArray;

}

}

更多关于java算法相关内容感兴趣的读者可查看本站专题:《Java文件与目录操作技巧汇总》、《Java数据结构与算法教程》、《Java操作DOM节点技巧总结》和《Java缓存操作技巧汇总》

希望本文所述对大家java程序设计有所帮助。


版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:网关api组件(api网关功能有哪些)
下一篇:echarts学习笔记之箱线图的分析与绘制详解
相关文章

 发表评论

暂时没有评论,来抢沙发吧~