I am using plupload at JavaScript library. I want to resume file uploads if there is a failure while implementing file uploads.
I've been told to use HTTP chunk transfer. but I don't know, How can I use it.
please show following server-side code.
private static final int BUFFER_SIZE = 100 * 1024;
try {
Integer chunk = 0, chunks = 0;
if(null != request.getParameter("chunk") && !request.getParameter("chunk").equals("")){
chunk = Integer.valueOf(request.getParameter("chunk"));
}
if(null != request.getParameter("chunks") && !request.getParameter("chunks").equals("")){
chunks = Integer.valueOf(request.getParameter("chunks"));
}
logger.info("chunk:[" + chunk + "] chunks:[" + chunks + "]");
...
appendFile(file.getInputStream(), destFile, response);
if (chunk == chunks - 1) {
logger.info("upload success !");
}else {
logger.info("left ["+(chunks-1-chunk)+"] chunks...");
}
} catch (IOException e) {
logger.error(e.getMessage());
}
}
public void appendFile(InputStream in, File destFile, HttpServletResponse response) {
OutputStream out = null;
try {
if (destFile.exists()) {
out = new BufferedOutputStream(new FileOutputStream(destFile, true), BUFFER_SIZE);
} else {
out = new BufferedOutputStream(new FileOutputStream(destFile),BUFFER_SIZE);
}
in = new BufferedInputStream(in, BUFFER_SIZE);
int len = 0;
byte[] buffer = new byte[BUFFER_SIZE];
while ((len = in.read(buffer)) > 0) {
out.write(buffer, 0, len);
}
} catch (Exception e) {
logger.error(e.getMessage());
}
finally {
try {
if (null != in) {
in.close();
}
if(null != out){
out.close();
}
} catch (IOException e) {
e.getMessage();
logger.error(e.getMessage());
}
}
}