文件上传下载工具类开发(存入数据库)

      将文件上传到文件夹下,然后用流写入到数据库(LongBlob存储),然后将文件流读取下载的功能实现。

public class UploadOrDownloadUtils {

/**
* @param request
* @param response
* @param fileName 下载文件名
* @param fileContent 下载二进制文件
* @return 是否上传成功
* @throws Exception
*/
public static boolean downloadFile(HttpServletRequest request,HttpServletResponse response, 
String fileName, byte[] fileContent) throws Exception{

if (StringUtil.isNotEmpty(fileName) && fileContent != null) {
response.reset();
//response.setContentType("application/octet-stream");  
response.setContentType("multipart/form-data");
//将字节数组转化成输入流
InputStream input = new ByteArrayInputStream(fileContent);
response.setCharacterEncoding("utf-8");  
//resp.setContentLength((int) file.length()); 
fileName = new String(fileName.getBytes("utf-8"), "ISO-8859-1");  
response.setHeader("Content-Disposition", "attachment;filename=" + fileName); 
byte[] buff = new byte[1024]; 
BufferedInputStream bis = null;
OutputStream os = null;
try {
bis = new BufferedInputStream(input);
os = response.getOutputStream();
int i = 0;
while((i = bis.read(buff)) != -1) {
os.write(buff , 0, i);  
os.flush();
}
} catch (IOException e) {
e.printStackTrace();
}finally{
try {
bis.close();
} catch (IOException e) {
e.printStackTrace();
}
}
return true;
}else {
return false;
}
}

/**
* 文件上传及表单字段的封装
* @param request
* @param response
* @param filePath 文件存放的临时目录
* @return request作用域封装
* @throws Exception
* error:mysql中默认上传最大是4m  根据情况修改
*/
public static HttpServletRequest uploadFile(HttpServletRequest request,HttpServletResponse response, String filePath) throws Exception{
request.setCharacterEncoding("utf-8");
response.setContentType("text/html;charset=utf-8");
DiskFileItemFactory factory =new DiskFileItemFactory(); 
//设置临时存储路径和上传文件的大小
String  path = request.getSession().getServletContext().getRealPath(filePath);
factory.setRepository(new File(path));
factory.setSizeThreshold(1024*1024);
//创建上传文件的对象
try {
  ServletFileUpload  upload = new ServletFileUpload(factory);
  List<FileItem>  list = upload.parseRequest(request);
  //判断list是否为文件格式
  for (FileItem item : list) {
if (item.isFormField()) {
String name = item.getFieldName();
String value = item.getString("utf-8");
request.setAttribute(name, value);
}else {
  String name = item.getFieldName();
  String value = item.getName();
  //开始检索文件名称 
      int start = value.lastIndexOf("\\"); 
      //获得文件的名称 
      String fileName = value.substring(start+1); 
      request.setAttribute(name, fileName); 
      //将文件写入
      File file = new File(path,fileName);
      item.write(file);
      //Thread.sleep(1000);
      
  boolean exists = file.exists();
  FileInputStream inputStream = new FileInputStream(file);
  byte[] data = inputStreamToByte(inputStream);
  request.setAttribute(name + "data", data);
  if (exists) {
if (inputStream != null) {
inputStream.close();
}
//删除临时文件
file.delete();
  }
}
}
} catch (Exception e) {
e.printStackTrace();
}
return request;
}

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值