package frame.file.office;
|
|
import java.io.Console;
|
import java.io.File;
|
import java.io.IOException;
|
import java.io.PrintWriter;
|
import java.net.URL;
|
import java.net.URLEncoder;
|
import java.util.List;
|
import java.util.Map;
|
|
import javax.servlet.ServletOutputStream;
|
import javax.servlet.http.HttpServletRequest;
|
import javax.servlet.http.HttpServletResponse;
|
|
import org.apache.commons.codec.net.URLCodec;
|
import org.slf4j.Logger;
|
import org.slf4j.LoggerFactory;
|
|
import com.sun.corba.se.impl.protocol.JIDLLocalCRDImpl;
|
|
import frame.call.writer.JsonWriter;
|
import frame.config.Configer;
|
import frame.data.DataContext;
|
import frame.file.FileIOContainer;
|
import frame.file.UploadResult;
|
import frame.file.office.excel.DownloadResult;
|
import frame.file.office.excel.ExcelLoader;
|
import frame.file.office.excel.ExcelWriter;
|
import frame.file.processor.Monitor;
|
import frame.upload.FileItem;
|
import frame.upload.FileUploadException;
|
import frame.upload.disk.DiskFileItemFactory;
|
import frame.upload.servlet.ServletFileUpload;
|
import frame.util.Util;
|
|
public class Engine {
|
|
private static Engine instance;
|
private static Object locker = new Object();
|
private Logger logger;
|
private ExcelLoader excelLoader;
|
|
private static int MAX_CACHE_SIZE = 30 * 1024 * 1024;
|
private static int MAX_FILE_SIZE = 100 * 1024 * 1024;
|
|
private Engine() {
|
logger = LoggerFactory.getLogger(this.getClass());
|
excelLoader = new ExcelLoader(logger);
|
|
}
|
|
public static Engine getInstance() {
|
synchronized (locker) {
|
if (instance == null) {
|
instance = new Engine();
|
}
|
|
return instance;
|
}
|
}
|
|
public static void download(HttpServletResponse response, String iocode, DataContext dataContext, Map<String, String> parameterProvider) throws IOException {
|
getInstance();
|
|
StringBuilder log = new StringBuilder();
|
|
try {
|
FileIOContainer.load();
|
// ExcelWriter excelWriter = new ExcelWriter(Monitor.getDownloadProgressor(), parameterProvider);
|
ExcelWriter excelWriter = new ExcelWriter(Monitor.getDownloadProgressor());
|
DownloadResult result = excelWriter.writeOneFile(iocode, dataContext);
|
|
String filename = result.getFilename();
|
response.addHeader("Content-Type", "application/octet-stream");
|
filename = URLEncoder.encode(filename, "utf-8");
|
response.addHeader("Content-Disposition", "attachment;filename=" + filename);
|
ServletOutputStream outputStream = response.getOutputStream();
|
String path = result.getPath();
|
File file = new File(path);
|
//TODO output
|
// outputStream.write(b)
|
// response.TransmitFile(result.getPath());
|
}
|
catch (Exception e) {
|
JsonWriter json = new JsonWriter();
|
json.beginObject();
|
json.addValue("log", log.toString());
|
json.addValue("error", e.getMessage());
|
|
json.beginArray("detail");
|
List<String> details = Monitor.getDownloadProgressor().getMessageList();
|
|
for (int i = 0; i < details.size(); i++) {
|
json.addValue(details.get(i));
|
}
|
|
json.endArray();
|
json.endObject();
|
PrintWriter writer = response.getWriter();
|
writer.write(json.toString());
|
}
|
}
|
|
public static UploadResult upload(String iocode, File file, HttpServletRequest request) throws Exception {
|
UploadResult result = new UploadResult(request);
|
|
result.writeBegin();
|
try {
|
getInstance();
|
FileIOContainer.load();
|
|
List<FileItem> loadUploadFile = loadUploadFile(request);
|
instance.excelLoader.
|
instance.excelLoader.loadOneFile(result, iocode, file);
|
}
|
catch (Exception e){
|
result.fail("error", e.getMessage());
|
}
|
finally {
|
result.writeEnd();
|
}
|
|
return result;
|
}
|
|
private static List<FileItem> loadUploadFile(HttpServletRequest request) throws FileUploadException {
|
|
DiskFileItemFactory diskFileFactory = new DiskFileItemFactory();
|
diskFileFactory.setSizeThreshold(MAX_CACHE_SIZE);
|
diskFileFactory.setRepository(new File(Configer.getParam("repository")));
|
|
ServletFileUpload fileUpload = new ServletFileUpload(diskFileFactory);
|
fileUpload.setSizeMax(MAX_FILE_SIZE);
|
return fileUpload.parseRequest(request);
|
}
|
|
public static UploadResult testDataProcess(String iocode, HttpServletRequest request) throws Exception {
|
UploadResult result = new UploadResult(request);
|
|
result.writeBegin();
|
try {
|
getInstance();
|
instance.excelLoader.testDataProcess(result, iocode);
|
}
|
catch (Exception e){
|
result.fail("error", e.getMessage());
|
}
|
finally {
|
result.writeEnd();
|
}
|
|
return result;
|
}
|
|
private void showHelloMessage() {
|
logger.info("Excel导入服务器 V1.0已启动");
|
}
|
|
|
}
|