项目补充了一下,需要从服务器上下载文件(效果如下图),来maker一下。
1.后台JAVA代码
//省略这两个参数的get set 方法
private InputStream downloadFilePath;//下载文件流
private String downloadFileName;//下载文件名
/**
*TODO(根据路径下载pdf)
*@param path
**/
public String getPdfByUrl(){
String saveRealFilePath = ServletActionContext.getServletContext().getRealPath("/doc");//下载路径
saveRealFilePath=saveRealFilePath+downloadFileName;
System.out.println(saveRealFilePath);
downloadFileName=downloadFileName.replace("/", "");
try {
downloadFileName=URLEncoder.encode(downloadFileName,"UTF-8");//解决中文乱码
downloadFilePath=new FileInputStream(saveRealFilePath);
} catch (Exception e) {
e.printStackTrace();
}
return SUCCESS;
}
2.Struts配置
<action name="plan_download" class="com.gsafety.plan.module.actions.PreplanAction" method="getPdfByUrl">
<!--配置结果类型为stream-->
<result name="success" type="stream">
<!--被下载的文件类型为pdf,其他类型请百度-->
<param name="contenType">application/pdf</param>
<!--被下载的输出流,跟后台参数的命名一致-->
<param name="inputName">downloadFilePath</param>
<!--被下载的文件名字,从后台获得,跟后台参数的命名一致-->
<param name="contentDisposition">attachment;filename="${downloadFileName}"</param>
<!--缓冲大小-->
<param name="bufferSize">8192</param>
</result>
</action>
3.前台请求(仅供参考)
//url 是我自己传的路径
function getPdfByUrl(url){
// 创建Form
var form = $('<form></form>');
// 设置属性
form.attr('action', "${pageContext.request.contextPath}/plan/preplan/plan_download.action");
form.attr('method', 'post');
// 创建Input
var set_input = $('<input type="text" name="downloadFileName" />');
set_input.attr('value', url);
// 附加到Form
form.append(set_input);
// 提交表单
$(document.body).append(form);
form.submit();
//return false自动刷新
return false;
}