SpringBoot+mybatis的下載問題

前些天寫了文件下載的代碼,測試的時候使用的文件比較小(小於4K)沒有問題。

今天在做一個相似的功能時上傳了一個大於4k的文件發現下載的文件永遠只有4K。首先檢查數據庫中存儲的文件內容對不對,發現沒有問題。最後定位應該是下載的時候讀取的問題。

錯誤的寫法是我使用了Oralce的BOLB字段去讀取字段內容,這樣它每次讀取最大爲4K。

最後改寫成byte[]數組的方式去獲取就沒有問題了,具體修改前後代碼如下:

修改前:

Map<String, Object> diaryNotes = diaryManageService.getADiaryNotes(serialNumber, dbType);
response.setContentType("application/octet-stream");
String fileName = (String)diaryNotes.get("attachmentFileName");
ServletOutputStream outSTr = null;
try {
    String codeFileName = URLEncoder.encode(fileName,"UTF-8");
    response.setHeader("Content-Disposition", "attachment; filename* = UTF-8''" + codeFileName);
    byte[] context = ((BLOB)diaryNotes.get("attachmentContent")).getPrefetchedData();
    outSTr = response.getOutputStream(); // 建立
    outSTr.write(context);
    outSTr.flush();
} catch (Exception e) {
    logger.error("下載日誌附件失敗", e);
} finally {
    try {
        outSTr.close();
    } catch (Exception e) {
        e.printStackTrace();
    }
}

修改後:

DiaryNotesObject diaryNotes = diaryManageService.getADiaryNotes(serialNumber, dbType);
response.setContentType("application/octet-stream");
ServletOutputStream outSTr = null;
try {
    String codeFileName = URLEncoder.encode(diaryNotes.getAttachmentFileName(),"UTF-8");
    response.setHeader("Content-Disposition", "attachment; filename* = UTF-8''" + codeFileName);
    outSTr = response.getOutputStream(); // 建立
    outSTr.write(diaryNotes.getAttachmentContent());
    outSTr.flush();
} catch (Exception e) {
    logger.error("下載日誌附件失敗", e);
} finally {
    try {
        outSTr.close();
    } catch (Exception e) {
        e.printStackTrace();
    }
}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章