Server
String fileNm = (String) model.get("fileNm");
File file = new File((String) model.get("filePath"));
long fileSz = file.length();
res.setStatus(HttpServletResponse.SC_OK);
response.setHeader("Content-Disposition", "attachment; filename=\"" + fileName + "\"");
res.setHeader("fileName", CommonUtils.BASE64EncoderStr(fileNm));
if (!isImage) {
response.setHeader("Content-Transfer-Encoding", "binary");
response.setHeader("Pragma", "cache");
}
OutputStream out = res.getOutputStream();
InputStream fis = null;
try {
fis = new FileInputStream(file);
// FileCopyUtils.copy(fis, out);
//3의 배수로 해야됨 (base64인코딩시 3바이트=>4바이트가 됨 [base64사이즈 = bufferSize*4/3])
int BUFFER_SIZE = 3072;
byte[] buffer = new byte[BUFFER_SIZE];
while (fis.read(buffer) != -1) {
out.write(Base64.encodeBase64(buffer));
}
Client
IE, Chrome 구분해서 다운로드 발생하게 해야함.
function fileDownload(attachId){
$.ajax({
method: 'POST'
,url: baseUrl + siteId + '/system/acts'
,headers: {
'authorization': 'Uar ' + authKey
}
,data: {
'actId': 'ACT_DN'
,'attachId': attachId
}
})
.done(function(data, status, req){
var fileName = base64.decode(req.getResponseHeader('fileName'));
var blob = new Blob([base64ToArrayBuffer(data)], {type: 'octet-stream'});
if (navigator.appVersion.toString().indexOf('.NET') > 0){ //IE
window.navigator.msSaveBlob(blob, fileName);
} else { //Chrome ...
var windowUrl = window.URL || window.webkitURL;
var url = windowUrl.createObjectURL(blob);
var anchor = document.createElement('a');
anchor.href = url;
anchor.download = fileName;
anchor.click();
windowUrl.revokeObjectURL(url);
}
})
.fail(function(xhr, status){
alert(xhr.responseText);
});
}
'Java & SpringFramework' 카테고리의 다른 글
SHA-512 암호화 코드 (0) | 2016.10.10 |
---|---|
JMX 세션수, 세션아이디리스트 가져오기? (0) | 2016.08.30 |
트랜잭션(@Transactional) 무시 (0) | 2016.06.16 |
LAST_INSERT_ID (0) | 2016.03.08 |
[SpringFramework] Spring+Mybatis 프로젝트 구성 (0) | 2014.07.23 |