ZipdlCommandExecutor.java
package cn.bluejoe.elfinder.controller.executors;
import javax.servlet.ServletContext;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.json.JSONObject;
import cn.bluejoe.elfinder.controller.executor.AbstractCommandExecutor;
import cn.bluejoe.elfinder.controller.executor.FsItemEx;
import cn.bluejoe.elfinder.service.FsService;
import sk.iway.iwcm.Tools;
import sk.iway.iwcm.common.DocTools;
/**
* Executor na stiahnutie viacerych suborov naraz
* https://hypweb.net/elFinder-nightly/demo/2.1/php/connector.minimal.php?cmd=zipdl&download=1&targets%5B%5D=l1_RG93bmxvYWRzL0V4YW1wbGUvbWFpbi5tY2UuanM&targets%5B%5D=6005bd866a15f&targets%5B%5D=Example-2.zip&targets%5B%5D=application%2Fzip&Example-2.zip
*/
public class ZipdlCommandExecutor extends AbstractCommandExecutor {
@Override
public void execute(FsService fsService, HttpServletRequest request, HttpServletResponse response, ServletContext servletContext) throws Exception {
JSONObject json = new JSONObject();
boolean download = "1".equals(request.getParameter("download"));
String zipdlHashPrefix = "zipdl_";
if (download) {
String[] targets = request.getParameterValues("targets[]");
String zipDlHash = null;
for (String target : targets) {
if (target.startsWith(zipdlHashPrefix)) {
zipDlHash = target.substring(zipdlHashPrefix.length());
}
}
FsItemEx zipFilePath = super.findItem(fsService, zipDlHash);
String date = Tools.formatDateTimeSeconds(Tools.getNow());
date = Tools.replace(date, " ", "-");
date = Tools.replace(date, ".", "-");
date = Tools.replace(date, ":", "-");
date = DocTools.removeChars(date);
String fileName = "download-"+date+".zip";
String mime = "application/zip";
response.setContentType(mime);
response.setHeader("Content-Disposition", "attachments; " + FileCommandExecutor.getAttachementFileName(fileName, request.getHeader("USER-AGENT")));
//response.setHeader("Content-Location", fileUrlRelative);
response.setHeader("Content-Transfer-Encoding", "binary");
FileCommandExecutor.writeFsItemExToResponse(zipFilePath, response);
//zmaz temp zip
zipFilePath.delete();
} else {
ArchiveCommandExecutor archive = new ArchiveCommandExecutor();
FsItemEx zipFilePath = archive.executeZip(fsService, request, servletContext, json);
response.getWriter().println("{\"zipdl\":{\"file\":\""+zipdlHashPrefix+zipFilePath.getHash()+"\"}}");
}
}
}