将文件上传到文件夹下,然后用流写入到数据库(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;
}