
File name
Commit message
Commit date
File name
Commit message
Commit date
File name
Commit message
Commit date
File name
Commit message
Commit date
File name
Commit message
Commit date
File name
Commit message
Commit date
package froala.editor.video;
import java.io.File;
import java.io.IOException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.tika.Tika;
/**
* 동영상 스트리밍 전송
* @since 2021. 6. 18.
* @author 임종호
* <PRE>
* -----------------------
* 개정이력
* 2021. 6. 18. 임종호 : 최초작성
* </PRE>
*/
public class StreamingResponse {
public static final int DEFAULT_BUFFER_SIZE = 204800;
private static final long DEFAULT_EXPIRE_TIME = 604800000L;
public Range write(File file, HttpServletRequest request, HttpServletResponse response) throws IOException {
Range range = null;
String fileName = (String) request.getAttribute("originFileNm");
String rangeStr = request.getHeader("range");
if (rangeStr != null) {
if (rangeStr.endsWith("-")) {
rangeStr = rangeStr + (file.length() - 1);
}
int idxm = rangeStr.trim().indexOf("-");
range = new Range(Long.parseLong(rangeStr.substring(6, idxm)), Long.parseLong(rangeStr.substring(idxm + 1)), file.length());
long partSize = 0;
if (range.getStart() > 0) {
range.setPart(true);
}
range.setPartSize(partSize);
} else {
range = new Range(0L, file.length() - 1, file.length());
}
range.setPartSize(range.getEnd() - range.getStart() + 1);
if (range.getEnd() == 0) {
range.setEnd(range.getStart() + DEFAULT_BUFFER_SIZE - 1);
}
if (range.getEnd() > range.getTotal() - 1) {
range.setEnd(range.getTotal() - 1);
}
String eTag = file.getName() + "_" + file.lastModified();
// mime type 지정
Tika tika = new Tika();
String mime = tika.detect(file);
response.setContentType(mime);
response.reset();
response.setStatus(range.isPart() ? HttpServletResponse.SC_PARTIAL_CONTENT : HttpServletResponse.SC_OK);
response.setHeader("Content-Range", "bytes " + range.getStart() + "-" + range.getEnd() + "/" + range.getTotal());
response.setHeader("Accept-Ranges", "bytes");
response.setHeader("Content-Length", "" + range.getPartSize());
response.setBufferSize(DEFAULT_BUFFER_SIZE);
response.setHeader("Content-Disposition", "inline;filename=\"" + fileName + "\"");
response.setHeader("ETag", eTag);
response.setDateHeader("Last-Modified", file.lastModified());
response.setDateHeader("Expires", System.currentTimeMillis() + DEFAULT_EXPIRE_TIME);
return range;
}
}