1. backend servlet
package com.tian.liferay.portlet.documentlibrary.service;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.URL;
import java.net.URLConnection;
import java.net.URLEncoder;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import com.liferay.portal.kernel.struts.BaseStrutsAction;
import com.liferay.portal.kernel.util.ParamUtil;
public class DLDownloadUrlLocalService extends BaseStrutsAction {
public String execute(HttpServletRequest request,
HttpServletResponse response) throws Exception {
String fileUrl = ParamUtil.getString(request, "url");
String title = ParamUtil.getString(request, "title");
String extension = ParamUtil.getString(request, "extension");
String fileName = "";
int index = title.lastIndexOf(".") + 1;
if (index > 0
&& title.substring(index, title.length()).equals(extension))
fileName = title;
else
fileName = title + "." + extension;
OutputStream os = null;
InputStream in = null;
try {
URL url = new URL(fileUrl);
in = url.openStream();
os = response.getOutputStream();
String userAgent = request.getHeader("User-Agent");
String contentType = URLConnection.guessContentTypeFromStream(in);
response.setContentType(contentType);
response.setCharacterEncoding("UTF-8");
// but IE 6 doesnot support.
if (userAgent != null && userAgent.indexOf("MSIE") != -1) {
fileName = URLEncoder.encode(fileName, "UTF-8");
fileName = fileName.replaceAll("\\+", "%20");
response.setHeader("Content-disposition","attachement;filename=" + fileName);
} else {
response.setHeader("Content-disposition", "attachement;filename="
+ "\""+new String(fileName.getBytes("UTF-8"),"iso8859-1") + "\"" );
}
response.setHeader("Cache-Control", "no-cache");
response.setHeader("Expires", "0");
response.setHeader("Cache-Control",
"must-revalidat&e, post-check=0, pre-check=0");
// FileCopyUtils.copy(in, response.getOutputStream());
byte temp[] = new byte[1000];
int n = 0;
while ((n = in.read(temp)) != -1) {
os.write(temp, 0, n);
}
} catch (Exception e) {
e.printStackTrace();
} finally {
if (os != null)
os.close();
if (in != null)
in.close();
}
return null;
}
}
2. front end code
var imageurl = '/c/document_library/download_url?url=<%= DLUtil.getPreviewURL(fileEntry, fileVersion, themeDisplay, StringPool.BLANK) %>&title=<%=title %>&extension=<%= extension %>';
window.open(encodeURI(imageurl),'_self');