[英]How to set encoding to file for download
我有一種方法可以開始下載存儲在oracle中的文本文件。
列類型為BLOB。 我正在使用下面的這段代碼來初始化下載,但是我不知道客戶端下載該文件時如何設置編碼。
if (result.next()) {
String fileName0 = String.valueOf(result.getDate(columnData));
String fileName1 = String.valueOf(result.getInt(columnNumSolit));
String fileName2 = String.valueOf(result.getInt(columnNumComplto));
BLOB blob = ((OracleResultSet) result).getBLOB(columnFile);
InputStream inputStream = blob.getBinaryStream();
//int fileLength = inputStream.available();
int fileLength = blob.getChunkSize();
ServletContext context = getServlet().getServletContext();
// Set MIME to file.
String mimeType = context.getMimeType(fileName0+fileName1+fileName2+ext);
if (mimeType == null) {
mimeType = "application/octet-stream";
}
// header to response.
response.setContentType(mimeType);
response.setContentLength(fileLength);
String headerKey = "Content-Disposition";
String headerValue = String.format("attachment; filename=\"%s\"",fileName0+fileName1+fileName2+ext);
response.setHeader(headerKey, headerValue);
// write file to client.
OutputStream outStream = response.getOutputStream();
byte[] buffer = new byte[fileLength];
int bytesRead = -1;
while ((bytesRead = inputStream.read(buffer)) != -1) {
outStream.write(buffer, 0, bytesRead);
}
inputStream.close();
outStream.close();
tipoSolit = null;
}else {
//do something
}
您想讓瀏覽器執行什么操作? 您要發送視頻或mp3還是什么? 模仿類型由您在文件之前發送的標頭設置。 如果知道某個網站具有您要查找的行為,則可以簡單地查看它們以chrome或wireshark發送的標題,然后僅在您自己的代碼中使用這些標題。
文件類型編碼的問題之一是您需要針對字節執行的每個步驟保持正確的編碼。 這意味着,如果“上傳->在數據庫中存儲->獲取數據庫->下載”中的任何步驟刪除了utf-8編碼,您都會得到錯誤的答案。 我在這里寫了一篇關於我使用UTF-8和MySQL的旅行的帖子: https : //stackoverflow.com/a/14411280/836450我建議發送一個包含單個utf-8字符的文件,然后通過以下方式調試整個鏈手。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.