gpt4 book ai didi

java - 即使通过 MimetypesFileTypeMap 设置内容类型后,如果下载的文件具有除 pdf 之外的任何其他扩展名,也将无法打开

转载 作者:行者123 更新时间:2023-11-29 15:43:50 25 4
gpt4 key购买 nike

我正在编写一个代码,用于下载存储在 MySQL 中的不同文件。我已经使用 MimetypesFileTypeMap 的方法 mimetypesFileTypeMap.getContentType() 设置了文件的内容类型,它正确设置了文件的内容类型,但是当文件被下载并且我尝试打开它时,只有 pdf 文件会打开其余类型,例如 png jpeg txt打不开。

这里有人可以帮助我吗?

这是我的 download.jsp 页面:

<%@page import="javax.activation.MimetypesFileTypeMap"%>
<%@page import="java.io.FileInputStream"%>
<%@page import="org.apache.commons.io.FileUtils"%>
<%@page import="java.io.File"%>
<%@page import="java.io.InputStream"%>
<%@page import="java.sql.ResultSet"%>
<%@page import="java.sql.Statement"%>
<%@page import="java.sql.Connection"%>
<%@page import="db.Dbconn"%>
<%

try{

//CONNECTING DATABASE
Dbconn db = new Dbconn();
Connection con = db.connect();

Statement stmt=null;
ResultSet rst0=null;

stmt = con.createStatement();

String sql="Select document,doc_name from `"+request.getParameter("year").toString().toLowerCase()+"itdocs` "
+ "where stud_id='"+request.getParameter("studid")+"' and doc_id='"+request.getParameter("docid").toString()+"';";

rst0 = stmt.executeQuery(sql);
if(rst0.next()){

MimetypesFileTypeMap mimetypesFileTypeMap=new MimetypesFileTypeMap();
response.setContentType(mimetypesFileTypeMap.getContentType(rst0.getString("doc_name").toString()));
System.out.println("contenttype setting to : "+mimetypesFileTypeMap.getContentType(rst0.getString("doc_name").toString()));
response.setHeader("Content-Disposition","attachment; filename=\"" + rst0.getString("doc_name") + "\"");

FileInputStream fs=null;
InputStream is= rst0.getBinaryStream("document");

File file = new File(rst0.getString("doc_name"));

FileUtils.copyInputStreamToFile(is, file);

fs = new FileInputStream(file);

int i;
while ((i=fs.read()) != -1) {
out.write(i);
}
fs.close();
}

}catch(Exception eex)
{
System.out.println("Exception while downloading file: "+eex.toString());
}
%>

最佳答案

 resp.setContentType("application/octet-stream");
resp.setHeader("content-disposition", "attachment;filename=\"" + fileName + "\"");

文件名应包含文件扩展名。例如.test.txt ot tets.jpg

如果您希望文件在浏览器中打开,则

resp.setContentType(<contentType>);
resp.setHeader("content-disposition", "inline;filename=\"" + fileName + "\"");

您需要使用响应文件OutputStream

try (InputStream inputStream = resultSet.getBinaryStream("FileData");
OutputStream outputStream = resp.getOutputStream()) {

byte[] data = new byte[1024];
while (inputStream.read(data) != -1) {
outputStream.write(data);
}

} catch (Exception e) {
e.printStackTrace();
}

关于java - 即使通过 MimetypesFileTypeMap 设置内容类型后,如果下载的文件具有除 pdf 之外的任何其他扩展名,也将无法打开,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57294502/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com