/**
*
*/
package com.dawning.gvui;
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.IOException;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.jar.JarOutputStream;
import java.util.zip.ZipEntry;
import javax.servlet.ServletContext;
import javax.servlet.http.HttpSession;
import org.apache.commons.io.FileUtils;
import org.springframework.http.HttpHeaders;
import org.springframework.http.HttpStatus;
import org.springframework.http.MediaType;
import org.springframework.http.ResponseEntity;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
/**
* @author suren
*
*/
@Controller
@RequestMapping(value = "download")
public class DownloadController
{
private ServletContext context;
@RequestMapping("download")
public ResponseEntity<byte[]> download(HttpSession session, Compontent compontent) throws IOException
{
this.context = session.getServletContext();
HttpHeaders headers = new HttpHeaders();
headers.setContentType(MediaType.APPLICATION_OCTET_STREAM);
ByteArrayOutputStream jsByteArray = new ByteArrayOutputStream();
ByteArrayOutputStream cssByteArray = new ByteArrayOutputStream();
if(compontent != null)
{
List<String> pathes = compontent.getPathes();
for(String path : pathes)
{
String realPath = context.getRealPath("/download/js/" + path + ".js");
File realFile = new File(realPath);
if(!realFile.isFile())
{
continue;
}
if(realPath.endsWith(".js"))
{
jsByteArray.write(FileUtils.readFileToByteArray(realFile));
String cssFileName = realFile.getName();
cssFileName = cssFileName.replace(".js", ".css");
realFile = new File(realFile.getParentFile().getParentFile(), "css/" + cssFileName);
if(realFile.isFile())
{
cssByteArray.write(FileUtils.readFileToByteArray(realFile));
}
}
}
headers.setContentDispositionFormData("attachment", compontent.getName());
}
return new ResponseEntity<byte[]>(getZipFile(jsByteArray.toByteArray(), cssByteArray.toByteArray()),
headers, HttpStatus.CREATED);
}
private byte[] getZipFile(Map<String, byte[]> byteArrayMap)
{
ByteArrayOutputStream byteArray = new ByteArrayOutputStream();
try
{
JarOutputStream jarOut = new JarOutputStream(byteArray);
Set<String> keySet = byteArrayMap.keySet();
for(String key : keySet)
{
byte[] bytes = byteArrayMap.get(key);
if(bytes.length <= 0)
{
continue;
}
ZipEntry entry = new ZipEntry(key);
jarOut.putNextEntry(entry);
jarOut.write(byteArrayMap.get(key));
}
jarOut.close();
return byteArray.toByteArray();
}
catch (IOException e)
{
e.printStackTrace();
}
return new byte[0];
}
private byte[] getZipFile(byte[] jsByteArray, byte[] cssByteArray)
{
Map<String, byte[]> byteArrayMap = new HashMap<String, byte[]>();
byteArrayMap.put("js/gvui.js", jsByteArray);
byteArrayMap.put("css/gvui.css", cssByteArray);
String fontsPath = this.context.getRealPath("/download/fonts");
File fontsFolder = new File(fontsPath);
if(fontsFolder.isDirectory())
{
for(File fontFile : fontsFolder.listFiles())
{
if(!fontFile.isFile())
{
continue;
}
try
{
byteArrayMap.put("fonts/" + fontFile.getName(),
FileUtils.readFileToByteArray(fontFile));
}
catch (IOException e)
{
e.printStackTrace();
}
}
}
return getZipFile(byteArrayMap);
}
}
[/codesyntax]
转载于:https://my.oschina.net/surenpi/blog/481872