第一种形式,是以流的开式直接response,适用于数据量不是很大的情况下。
第二种形式,是先将要下载的文件写到后台的一个文件中,然后再进行下载。
package com.lh446.action;
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.util.ArrayList;
import java.util.List;
import java.util.zip.ZipEntry;
import java.util.zip.ZipOutputStream;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;
import org.apache.struts.actions.MappingDispatchAction;
public class ExportAction extends MappingDispatchAction {
/**
* 直接通过流导出
* @param arg0
* @param arg1
* @param arg2
* @param arg3
* @return
* @throws Exception
*/
public ActionForward export(ActionMapping arg0, ActionForm arg1, HttpServletRequest req, HttpServletResponse res) throws Exception {
String msg="倒萨大额外人玩儿完";
String fileName="test1.txt";
//fileName=new String(fileName.getBytes("iso-8859-1"),"utf-8");
res.setContentType("text/plain;charset=GBK");
res.addHeader("Content-disposition", "attachment;filename="+fileName);
BufferedOutputStream out=new BufferedOutputStream(res.getOutputStream());
out.write(msg.getBytes("GBK"));
out.close();
return null;
}
/**
* 先将数据保存在本地(本实例通过TXT文本演示)在下载
* @param arg0
* @param arg1
* @param arg2
* @param arg3
* @return
* @throws Exception
*/
public ActionForward export2(ActionMapping arg0, ActionForm arg1, HttpServletRequest req, HttpServletResponse res) throws Exception {
String msg="倒萨大额外人玩儿完";
String path = new String((this.getServlet().getServletContext()
.getRealPath("/") + "/export/").getBytes(), "GBK");// 存放路径
File file=new File(path+"导出测试二.txt");
//创建新文件
if(file.exists()){
file.delete();
}
file.getParentFile().mkdirs();
file.createNewFile();
FileOutputStream fout=new FileOutputStream(file);
BufferedOutputStream buf=new BufferedOutputStream(fout);
buf.write(msg.getBytes());
buf.close();//写入都本地文件中
res.setContentType("text/plain;charset=GBK");
res.addHeader("Content-disposition", "attachment;filename=test2.txt");
BufferedOutputStream out=new BufferedOutputStream(res.getOutputStream());
FileInputStream in=new FileInputStream(path+"导出测试二.txt");
byte[] b=new byte[1024];
int i=0;
while((i=in.read(b))>0){
out.write(b, 0, i);
out.flush();
}
if(in!=null){
in.close();
}
if(out!=null){
out.close();
}
return null;
}
/**
* 先将数据保存在本地并压缩处理(保存为zip文件)在下载
* @param arg0
* @param arg1
* @param arg2
* @param arg3
* @return
* @throws Exception
*/
public ActionForward export3(ActionMapping arg0, ActionForm arg1, HttpServletRequest req, HttpServletResponse res) throws Exception {
String msg="倒萨大额外人玩儿完";
String path = new String((this.getServlet().getServletContext()
.getRealPath("/") + "/export/").getBytes(), "GBK");// 存放路径
List<String> fileNames=new ArrayList<String>();
fileNames.add("test3.txt");
File file=new File(path+"test3.txt");
// 创建新文件
if(file.exists()){
file.delete();
}
file.getParentFile().mkdirs();
file.createNewFile();
FileOutputStream fout=new FileOutputStream(file);
BufferedOutputStream buf=new BufferedOutputStream(fout);
buf.write(msg.getBytes());
buf.close();//写入都本地文件中
String zipName="test3.zip";
tozip(fileNames,path,zipName);
res.setContentType("application/zip zip;charset=UTF-8");
res.addHeader("Content-Disposition", "attachment;filename="
+ zipName);
OutputStream outp = res.getOutputStream();
FileInputStream in=new FileInputStream(path+zipName);
byte[] b = new byte[1024];
int i = 0;
while ((i = in.read(b)) > 0) {
outp.write(b, 0, i);
outp.flush();
}
if (in != null) {
in.close();
in = null;
}
if (outp != null) {
outp.close();
outp = null;
}
return null;
}
//压缩处理:
public void tozip(List<String> fileNames,String path,String zipName) throws IOException{
// 新建zip文件
ZipOutputStream zipout=null;
FileOutputStream fout=new FileOutputStream(path+zipName);
zipout=new ZipOutputStream(new BufferedOutputStream(fout));
for(int i=0;i<fileNames.size();i++){
ZipEntry zipEntry=new ZipEntry(fileNames.get(i));//设置zip文件中每个文件的名称
zipout.putNextEntry(zipEntry);
FileInputStream in=new FileInputStream(path+fileNames.get(i));//通过文件流取得当前要压缩文件的数据
byte[] b=new byte[1024];
int a=0;
while((a=in.read(b))>0){
zipout.write(b, 0, a);//写入到当前设置的zipEntry中,即zip文件中的一个压缩文件
zipout.flush();
}
in.close();
}
zipout.close();
}
}
页面请求代码:(通过form表单请求)
function exportData(){
var form=document.dataForm;
var url="/test/export.do";
form.action=url;
form.submit();
}
假如页面是二级页面(即通过window.showModalDialog(src,window,style)打开)则此时无法打开下载框。
解决方法:1。在form中设置target="_self",此时会新打开一个页面下载(不友好)
2。。通过iframe框架解决:
<iframe id="hidden_iframe" name="hidden_iframe" style="display: none"></iframe>
<form id="dataform" name="dataform" method="post" target="hidden_iframe"></form>
分享到:
相关推荐
这个"C# Web文件下载类"是一个方便的工具,可以简化从Web服务器获取文件的过程。这个类可能包含了处理HTTP请求、设置请求头、处理响应以及保存文件到本地磁盘等功能。在CodeProject这样的开源社区上分享这样的代码...
由于OA系统是基于WEB方式的,如果只判断用户是否点击“下载文件”,就来判断用户是否成功下载了文件。这种方式很显然行不通,怎么办呢?我想到的就是用一控件,然后用回调事件来处理数据库方面的问题(下载记录问题) ...
在Java Web开发中,实现文件下载功能是非常常见的需求,例如让用户下载图片、文档等资源。下面将详细讲解两种实现文件下载的方法:通过超链接和通过Servlet程序。 ### 1. 通过超链接实现下载 在HTML页面中,可以...
在这个场景下,"C# WebAPI文件上传下载源码"指的是使用C#编写的一套实现文件上传和下载功能的WebAPI服务代码。 文件上传功能是Web应用中的常见需求,允许用户将本地文件传输到服务器。在C# WebAPI中,这通常通过...
Java Web 文件上传、下载、查看操作 Java Web 文件操作是日常开发解决的问题,主要是针对解决文件的上传下载、查看操作。下面是相关的知识点: 一、Java Web 文件上传操作 * 文件上传是指通过 HTTP 请求将文件从...
在“Web Api 通过文件流 下载文件”这个场景下,主要涉及以下知识点: 1. **HTTP响应与文件流**: 当客户端(如浏览器)请求一个文件时,服务器端的Web API控制器需要创建一个HTTP响应,该响应包含文件的数据。文件...
文件下载功能允许用户从WebServer获取大文件,如软件安装包、高清视频或文档。 在单线程下载模式下,文件会被一次性完整地下载到客户端。然而,这种方式对于大文件来说可能会消耗很长时间,且如果网络连接不稳定,...
在.NET Core WebAPI中,构建一个支持文件上传和下载的服务是一项常见的需求。这涉及到处理HTTP请求,存储文件,以及提供安全的文件访问机制。本文将深入探讨如何在.NET Core WebAPI项目中实现这一功能。 首先,我们...
在ASP.NET(C#) Web API开发中,有时我们需要提供一个接口让用户能够下载服务器上的文件。这个实例将详细讲解如何利用文件流来实现文件的下载功能。首先,我们要理解Web API的基本原理,它是一个用于构建RESTful服务...
1. 下载并解压S3700_52P-V100R006C00.002.web.zip文件。 2. 使用TFTP服务器或其他文件传输工具将解压后的文件上传到交换机的特定路径。 3. 登录到交换机CLI,执行升级命令,指向Web管理文件的位置。 4. 交换机会自动...
华为S2300 S3300 S5300系列交换机最新web文件
在这个场景中,"华为5300交换机web配置文件" 提供了通过Web界面管理设备的方法,这使得非技术背景的用户也能相对容易地进行设备配置。 首先,我们需要了解什么是Web配置。Web配置是指通过浏览器访问设备的内置HTTP...
当用户需要获取服务器上的资源,如文档、图片或者视频等,通常会通过点击下载链接触发服务器进行文件传输。本项目针对的一个重要问题就是如何在使用IE11浏览器时避免出现文件名乱码的情况。 首先,我们要理解这个...
"华为 S5700 web管理加载文件"是指将特定的Web管理模块安装到交换机上,以便通过浏览器进行设备的配置和监控。 `S5700SI-V100R005.002.web.zip` 是这个过程中的关键文件,它是一个包含Web管理界面资源的压缩包。该...
此压缩包文件"华为S2700EI-V100R006C05.web.zip"中的内容,显然是与该系列交换机的Web管理界面相关的资源文件。 首先,我们来看一下"华为S2700EI-V100R006C05.web.zip"的版本号,V100R006C05表示这是该设备软件的一...
通过flask框架实现文件的上传与下载
S5300-V200R001C00.005补丁及Web文件 S5300-6TP-LI-V200R001C00.005.web S5300EI-V200R001C00.005.web S5300EI-V200R001SPH027.pat S5300HI-V200R001C00.005.web S5300LI-V200R001SPH027.pat S5300SI-V200R001C00....
Visual C++源代码 101 如何从Web客户端异步下载文件Visual C++源代码 101 如何从Web客户端异步下载文件Visual C++源代码 101 如何从Web客户端异步下载文件Visual C++源代码 101 如何从Web客户端异步下载文件Visual ...
ctf+web安全+任意文件上传+任意文件下载
在IT行业中,Web文件上传、下载和删除管理是构建交互式网站和服务不可或缺的一部分。这个功能允许用户通过Web界面上传自己的文件到服务器,下载所需的文件,以及根据需要删除这些文件。以下将详细介绍这一主题的关键...