Java jsp safari浏览器windows文件下载内容配置文件名-
下面的代码用于下载附件,附件编码为文件名的汉字Java jsp safari浏览器windows文件下载内容配置文件名-,java,jsp,tomcat,safari,Java,Jsp,Tomcat,Safari,下面的代码用于下载附件,附件编码为文件名的汉字 w_inf_src = new File(p_filepath); w_inf = new FileInputStream(w_inf_src); p_response.setContentType(w_mime+";charset=UTF-8"); p_response.setContentLength(new Long(w_inf_src.length()).intValue()); p_response.setChar
w_inf_src = new File(p_filepath);
w_inf = new FileInputStream(w_inf_src);
p_response.setContentType(w_mime+";charset=UTF-8");
p_response.setContentLength(new Long(w_inf_src.length()).intValue());
p_response.setCharacterEncoding("UTF-8");
p_request.setCharacterEncoding("UTF-8");
p_response.setHeader("Content-disposition",
"attachment;filename=\"" + (new java.net.URI(null, null, p_request, p_filename, null)).toASCIIString() + "\"");
// Download File In Progress
w_outf = p_response.getOutputStream();
w_bof = new BufferedOutputStream(w_outf);
while ( (w_bytes_read = w_inf.read(w_buffer, 0, w_buffer.length)) != -1)
w_bof.write(w_buffer, 0, w_bytes_read);
w_bof.flush();
我还尝试了文件名*=UTF-8''
File w_inf_src = new File(p_filepath);
String encoding = StandardCharsets.UTF_8.name();
String w_disposition = String.format("%s;filename=\"%3$s\"; filename*=%2$s''%3$s",
Part.ATTACHMENT,
encoding,
URLEncoder.encode(p_filename, encoding).replace("+", "%20"));
p_response.setContentType(w_mime);
p_response.setContentLengthLong(w_inf_src.length());
p_response.setCharacterEncoding(encoding);
p_response.setHeader("Content-Disposition", w_disposition);
byte[] w_buffer = new byte[p_response.getBufferSize()];
try(FileInputStream w_inf = new FileInputStream(w_inf_src);
OutputStream w_outf = p_response.getOutputStream())
{
int n;
while((n = w_inf.read(w_buffer)) != -1)
{
w_outf.write(w_buffer, 0, n);
}
}
一些注意事项:
BufferedInputStream
是多余的,因为响应具有内部缓冲respose.getBufferSize()
)try with resources
response.setContentLengthLong()
,他们最终明白了整数是不够的response.setHeader(“内容长度”,String.valueOf(w_inf_src.Length())代码>:这确保了较大的长度不会切割成整数大小
您好,已尝试使用此代码,但safari返回的是编码文件名(%ee%…)而不是文字汉字。是否尝试其他浏览器?他们返回正确的文件名吗?其他浏览器工作正常,包括mac的safari,但windows的safari返回编码字符串。这可能是safari(windows)的问题。由于您可以控制服务器端,所以您可以做的很少。您可以尝试将windows操作系统文件编码(欧洲默认为CP1252或ISO-8859-1)更改为UTF-8,希望safari会使用它。您好,不知道如何更改windows中的默认文件编码,但您是如何做到的?当我在网上搜索时,它只显示了如何将其更改为记事本,我想如果无法做到这一点,我们将放弃对WindowsSafari的支持。非常感谢你的帮助。