ResponseMessageBuilder.java 1.53 KB
Newer Older
Memorydoc's avatar
#  
Memorydoc committed
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37
package pwc.taxtech.atms.common;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Component;

import javax.servlet.http.HttpServletResponse;
import java.io.ByteArrayOutputStream;
import java.io.OutputStream;
import java.net.URLEncoder;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;

@Component
public class ResponseMessageBuilder {
    private final Logger logger = LoggerFactory.getLogger(this.getClass());

    public HttpServletResponse getDownloadTmpResponseMessage(HttpServletResponse response, OutputStream outputStream, String fileName) throws Exception {
        fileName = fileName + DateTimeFormatter.ofPattern("yyyyMMddHHmmssSSS").format(LocalDateTime.now()) + ".xlsx";

        response.setContentType("application/octet-stream;charset=UTF-8");
        response.setHeader("Access-Control-Expose-Headers", "x-file-name");
        response.addHeader("Content-Disposition", "attachment; filename=" + fileName);

        try (OutputStream responseOutputStream = response.getOutputStream()) {
            response.setHeader("x-file-name", URLEncoder.encode(fileName, "UTF-8"));
            ByteArrayOutputStream byteArrayOutputStream = (ByteArrayOutputStream) outputStream;
            responseOutputStream.write(byteArrayOutputStream.toByteArray());
        } catch (Exception e) {
            logger.error("Error write data to response output stream");
            e.printStackTrace();
            throw new Exception(e.getMessage());
        }

        return response;
    }
}