問(wèn)題:
??????直接用URLEncoder.encode(fileName,"UTF-8"),得到的文件名長(zhǎng)度會(huì)被截?cái)唷?br />
解決方法是:
??????文件名先用“GB2312”編碼,然后用“
ISO8859_1”解碼。當(dāng)然也可以在將文件名保存到數(shù)據(jù)庫(kù)之前用“GB2312”編碼。
代碼如下:
?1
conn?=?DBUtil.getConnection();
?2
????????????ps?=?conn.prepareStatement("SELECT?FILE_NAME,?CONTENT_TYPE,?CONTENT?FROM?PUB_JOB_ATTACHMENTS?WHERE?ATTACHID?=??");
?3
????????????ps.setString(1,getAttachId());
?4
????????????rs?=?ps.executeQuery();
?5
????????????if(rs.next())
?6
????????????
{
?7
????????????????//java.net.URLEncoder.encode(rs.getString("FILE_NAME"),?"UTF-8")
?8
????????????????response.setContentType(rs.getString("CONTENT_TYPE"));
?9
????????????????String?fileName=rs.getString("FILE_NAME");
10
????????????????fileName=URLEncoder.encode(fileName,"GB2312");
11
????????????????fileName=URLDecoder.decode(fileName,?"ISO8859_1");
12
????????????????response.addHeader("Content-Disposition",?"attachment;?filename=\""?+?fileName?+?"\"");
13
????????????????Blob?content?=?rs.getBlob("CONTENT");
14
????????????????InputStream?ins?=?content.getBinaryStream();
15
????????????????byte?buffer[]?=?new?byte[1024];
16
????????????????int?length?=?-1;
17
????????????????outs?=?response.getOutputStream();
18
????????????????while((length?=?ins.read(buffer))?!=?-1)
19
????????????????????outs.write(buffer,?0,?length);
20
????????????????ins.close();
21
????????????????outs.flush();
22
????????????}