Java 从数据库表下载文件(Mysql、spring)
我已经编写了下载文件(数据库表中的blob)的代码。下载时会收到提示,但下载时,其大小会增加,并以空白文件或损坏文件的形式打开。控制器调用2个服务方法downloadfile():-将blob类型获取到字节数组中 downloadfilename():-获取存储在数据库中的文件名。 控制程序代码Java 从数据库表下载文件(Mysql、spring),java,mysql,spring,Java,Mysql,Spring,我已经编写了下载文件(数据库表中的blob)的代码。下载时会收到提示,但下载时,其大小会增加,并以空白文件或损坏文件的形式打开。控制器调用2个服务方法downloadfile():-将blob类型获取到字节数组中 downloadfilename():-获取存储在数据库中的文件名。 控制程序代码 protected ModelAndView handleRequestInternal(HttpServletRequest request, HttpServle
protected ModelAndView handleRequestInternal(HttpServletRequest request,
HttpServletResponse response) throws Exception {
byte[] fileBytes = userService.downloadFile();
String filename = userService.downloadFileName();
String fileType = filename.substring(filename.indexOf(".")+1,filename.length());
System.out.println("FILETYPE IS :>>>>>>>>>>>>>>>"+fileType);
if (fileType.trim().equalsIgnoreCase("txt"))
{
response.setContentType( "text/plain" );
}
else if (fileType.trim().equalsIgnoreCase("doc"))
{
response.setContentType( "application/msword" );
}
else if (fileType.trim().equalsIgnoreCase("xls"))
{
response.setContentType( "application/vnd.ms-excel" );
}
else if (fileType.trim().equalsIgnoreCase("pdf"))
{
response.setContentType( "application/pdf" );
}
else if (fileType.trim().equalsIgnoreCase("ppt"))
{
response.setContentType( "application/ppt" );
}
else
{
response.setContentType( "application/octet-stream" );
}
response.setHeader("Content-Disposition","attachment; filename=\""+filename+"\"");
response.setHeader("cache-control", "no-cache");
response.setHeader("cache-control", "must-revalidate");
ServletOutputStream outs = response.getOutputStream();
outs.write(fileBytes);
outs.flush();
outs.close();
return null;
}
刀类是这样的
你的问题不是很清楚,但我想我知道你的意思 如果文件较大(10MB),则必须在http头中指定内容长度。如果不是这样,浏览器将表现得异常。(10MB的确切限制取决于浏览器)
public String downloadFile(){
String selectquery = "select * from upload_file where id=1";
System.out.println("inside after query");
ResultSet rs = stmt.executeQuery(selectquery);
while (rs.next()) {
fileBytes = rs.getBytes("description");
fileName = rs.getString("upload_filename");
System.out.println("**************************************"
+ fileName);
}
return fileName;
} catch (SQLException s) {
System.out.println(s);
}
connection.close();
} catch (Exception e) {
e.printStackTrace();
}
return null;
}