web下载文件,web下载文件 打开文件

http://www.itjxue.com  2023-01-04 17:19  来源:未知  点击次数: 

Javaweb中的文件下载实现

需要在响应头部加上一些标示,告诉浏览器这个是文件下载。

如果你用了框架比如struts,需要加如下配置

result name="success" type="stream"

param name="contentType"application/octet-stream;charset=ISO8859-1/param

param name="inputName"fileStream/param

param name="contentDisposition"attachment;filename="${fileName}"/param

param name="bufferSize"2048/param

/result

如果没有用框架,就手动在返回对象添加这些contentType

怎样用web迅雷下载文件

尊敬的迅雷用户,您好:

由于web迅雷现在已经没有维护,版本升级为迅雷7,建议您使用迅雷7,旧版本问题会在新版本完善,请登录迅雷软件中心()这个页面,下载一个迅雷7的安装包进行安装使用。

迅雷7优点:

1、下载加速向服务器加速全网数据挖掘,自动匹配与资源相同的镜像用户下载。

原理:利用互联网上的其他服务器提供的资源进行下载,如用户下载一个软件,该软件在A网站存在,用户从A网站下载,同时B网站存在相同资源,则迅雷可以从B网站下载,提升了下载速度。

2、P2P加速利用P2P技术进行用户之间的加速,该通道产生的上传流量会提升通道的健康度,从而提升通道加速效果。

原理:若其他迅雷用户下载过本文件,则下载时可以由其他用户上传给自己。

3、高速通道加速高速CDN加速,高速通道可以利用您物理带宽的上限进行加速,如您是4M的宽带,那您最高的下载速度是“390-420KB/S”,用户下载了一个迅雷服务器上没有的资源,迅雷会记录资源地址,云端准备完成后其他用户在下载时即可用高速通道下载。

4、离线下载加速您只需提交任务链接,云端准备完成后即可高速下载。

原理:冷门资源服务器缓慢,迅雷服务器可以代替用户下载,下载后用户可以从迅雷服务器上高速下载文件。

根据您自身的需求选择您要安装的下载工具。

感谢您对迅雷的支持!

更多疑问,欢迎您向迅雷网络平台提问。

怎样用web迅雷进行下载

web迅雷

WEB迅雷同样是一款基于多资源超线程技术的下载工具,它继承了迅雷5的操作方便、高速下载的特点外,同时使用全网页化的操作界面,更符合互联网用户使用习惯,是国内第一款网页上的下载工具。

WEB迅雷的安装文件只有611KB,安装非常简单,只要双击就可以完成。

安装完成后,软件会自动运行,同时打开WEB迅雷的操作主界面(如图1),可以在系统托盘区看到WEB迅雷的红色图标(如图2)。该主界面与迅雷5主界面相差不大,左侧是任务管理器,在这里对下载的文件进行分类管理,右侧是下载区,在这里可以看到相应的正在下载与已下载文件的详细信息。

我们可以使用WEB迅雷直接搜索要下载的信息,只要在搜索文本框中输入要下载的关键字,然后点击下载“搜索”按钮就可以快速的找到要下载的资源(如图5)。在这里可以看到每个资源的名称、大小、文件格式、昨日下载次数及最后更新时间等信息,点击资源链接后就可以直接使用WEB迅雷下载了。

文件开始下载后,随时可以看到当前下载速度、资源数、剩余时间、下载百分比等信息,方便的了解正在下载文件的状态。

值得一提的是,即使我们关闭了浏览器,而没有关闭系统托盘图标,下载任务也会继续运行,所以不用担心不小心关闭浏览器而结束正在进行的下载任务。

点击已下载链接,可以看到全部下载完成的文件列表(如图9)。在这里可以看到下载文件的文件名、资源描述及完成时间等。选中一个文件,会以高亮显示,点击“打开”按钮,就可以直接打开且运行该文件,点击目录按钮,则可以打开该文件所在的目录;另外还可以通过下拉菜单对下载文件进行管理,如重新下载、查看属性、移动位置等等;同时还支持按文件类型自动分类功能,把相应的下载文件自动分配到对应的分类中。

通过试用,我们可以看出WEB迅雷与迅雷5功能上不差上下,操作也非常简便,甚至比迅雷5还要简洁。由于同样使用了P2SP下载协议,下载速度非常迅速。

从web服务器上下载文件是如何实现的?

/**

?*?根据文件输入流,和文件名称下载文件

?*?@param?resp HttpServletResponse

?*?@param?file 供下载的文件

?*?@param?file_name 所显示的下载文件名称

?*/

public?void?FileDownLoad(HttpServletResponse?resp?,File?file,?String?file_name)?{

try?{

String?fileName?=?new?String(file_name.getBytes("GBK"),?"ISO8859_1");

resp.setContentType("application;charset=utf-8"); //?指定文件的保存类型。

resp.setHeader("Content-disposition",?"attachment;?filename="+?fileName);

ServletOutputStream?oupstream?=?resp.getOutputStream();

FileInputStream?from?=?new?FileInputStream(file);

byte[]?buffer?=?new?byte[catchSize];

int?bytes_read;

while?((bytes_read?=?from.read(buffer))?!=?-1)?{

oupstream.write(buffer,?0,?bytes_read);

}

oupstream.flush();

}?catch?(Exception?e)?{

}

}

这个是服务器端文件下载工具类 题主可以试试,望采纳

JavaWeb下载文件,怎么获取文件下载完毕的状态?

在Javaweb中,上传下载是经常用到的功能,对于文件上传,浏览器在上传的过程中是以流的过程将文件传给服务器,一般都是使用commons-fileupload这个包实现上传功能,因为commons-fileupload依赖于commons-io这个包,所以需要下载这两个包commons-fileupload-1.2.1.jar和commons-io-1.3.2.jar。

1、搭建环境

创建Web项目,将包导入到项目lib下

2、实现文件上传

(第一种上传的方法)

新建upload.jsp页面

?

12345678910111213141516

%@ page language="java" contentType="text/html; charset=UTF-8"??pageEncoding="UTF-8"%!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" ""htmlheadmeta http-equiv="Content-Type" content="text/html; charset=UTF-8"titleupload file/title/headbody??!--这里的%=request.getContextPath()%是表示项目的绝对路径,也就是说不管你以后将项目拷贝到哪个位置,它都会找到准确的路径 --??form action="%=request.getContextPath()%/uploadServlet" enctype="multipart/form-data" method="post"????span选择文件:/spaninput type="file" name="file1"????input type="submit" value="上传"??/form/body/html

新建处理文件上传的Servlet

?

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667

package com.load;?import java.io.File;import java.io.IOException;import java.util.List;import javax.servlet.ServletContext;import javax.servlet.ServletException;import javax.servlet.annotation.WebServlet;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import org.apache.commons.fileupload.FileItem;import org.apache.commons.fileupload.FileUploadException;import org.apache.commons.fileupload.disk.DiskFileItemFactory;import org.apache.commons.fileupload.servlet.ServletFileUpload;@WebServlet("/uploadServlet")public class uploadServlet extends HttpServlet {??private static final long serialVersionUID = 1L;??public uploadServlet() {????super();??}??/* fileupload 包中, HTTP 请求中的复杂表单元素都被看做一个 FileItem 对象;???* FileItem 对象必须由 ServletFileUpload 类中的 parseRequest() 方法解析 HTTP 请求???* (即被包装之后的 HttpServletRequest 对象)出来,即分离出具体的文本表单和上传文件???* */??protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {????//通过isMultipartContent()方法:分析请求里面是不是有文件上的请求,????boolean isMultipart = ServletFileUpload.isMultipartContent(request);????if(isMultipart){??????//创建可设置的磁盘节点工厂??????DiskFileItemFactory factory = new DiskFileItemFactory();??????//获取请求的上下文信息??????ServletContext servletContext = request.getServletContext();??????//缓存目录,每个服务器特定的目录??????File repository = (File) servletContext.getAttribute("javax.servlet.context.tempdir");??????//设置服务器的缓存目录??????factory.setRepository(repository);??????//ServletFileUpload 对象的创建需要依赖于 FileItemFactory??????//工厂将获得的上传文件 FileItem 对象保存至服务器硬盘,即 DiskFileItem 对象。??????ServletFileUpload upload = new ServletFileUpload(factory);??????try {????????//解析即被包装之后的 HttpServletRequest对象,既是分离文本表单和上传文件(http请求会被包装为HttpServletRequest)????????ListFileItem items = upload.parseRequest(request);????????for(FileItem item:items){??????????String fieldName = item.getFieldName();???????????String fileName = item.getName();??????????String contentType = item.getContentType();??????????boolean isInMemory = item.isInMemory();??????????long sizeInBytes = item.getSize();??????????//实例化一个文件??????????//request.getRealPath(获取真实路径)??????????File file = new File(request.getRealPath("/")+"/loads"+fileName.substring(fileName.lastIndexOf("\\")+1,fileName.length()));??????????item.write(file);????????}??????} catch (FileUploadException e) {????????e.printStackTrace();??????} catch (Exception e) {?????????????????e.printStackTrace();??????}????}??}???protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {????doGet(request, response);??}}

(第二种上传的方法)

新建Jsp页面(同上,只是路径改变下)

?

12345678910111213141516

%@ page language="java" contentType="text/html; charset=UTF-8"??pageEncoding="UTF-8"%!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" ""htmlheadmeta http-equiv="Content-Type" content="text/html; charset=UTF-8"titleupload file/title/headbody??!--这里的%=request.getContextPath()%是表示项目的绝对路径,也就是说不管你以后将项目拷贝到哪个位置,它都会找到准确的路径 --??form action="%=request.getContextPath()%/uploadservlet1" enctype="multipart/form-data" method="post"????span选择文件:/spaninput type="file" name="file1"????input type="submit" value="上传"??/form/body/html

建立Servlet处理上传

?

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263

package com.load;?import java.io.File;import java.io.FileOutputStream;import java.io.IOException;import java.io.InputStream;import java.io.OutputStream;import javax.servlet.ServletException;import javax.servlet.annotation.MultipartConfig;import javax.servlet.annotation.WebServlet;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import javax.servlet.http.Part;@WebServlet("/uploadservlet1")@MultipartConfig(location="")public class uploadservlet1 extends HttpServlet {??private static final long serialVersionUID = 1L;??public uploadservlet1() {????super();??}???protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {????response.setContentType("text/html;charset=UTF-8");????request.setCharacterEncoding("utf-8");?????????//取得上传文件,读取文件????Part part = request.getPart("file1");????//定义一个变量去接收文件名????String filename = null;????//Content-Disposition: 就是当用户想把请求所得的内容存为一个文件的时候提供一个默认的文件名????//Content-Disposition:告诉浏览器以下载的方式打开文件????for (String content : part.getHeader("content-disposition").split(";")) {??????System.out.println(content);??????//取得文件名??????if (content.trim().startsWith("filename")) {????????//截取文件名????????filename = content.substring(????????????content.indexOf('=') + 1).trim().replace("\"", "");??????}????}????//输出流?????OutputStream out = null;?????//输入流?????InputStream filecontent = null;?????//File.separator 取得系统的分割线等数据?????out = new FileOutputStream(new File("e:/loads" + File.separator + filename));?????int read;????//获得一个输入流????filecontent = part.getInputStream();????final byte[] bytes = new byte[1024];?????????while ((read = filecontent.read(bytes)) != -1) {??????out.write(bytes, 0, read);????}????System.out.println("New file " + filename + " created at " + "/loads");??}???protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {????// TODO Auto-generated method stub????doGet(request, response);??}}

(第三种上传的方法)

这里使用的是jspSmartUpload包上传下载,笔者认为这种上传下载较为简单,但是好像不是很多人用,不懂。

创建HTML页面

?

123456789101112131415161718192021222324252627

!DOCTYPE htmlhtmlheadmeta http-equiv="Content-Type" content="text/html; charset=UTF-8"title上传文件/title/headbody??p /p??p align="center"上传文件选择/p??form method="post" Action="../DouploadServlet" enctype="multipart/form-data"????table width="75%" border="1" align="center"??????trtddiv align="center"????????1.input type="file" name="file1" ??????/div/td/tr????????trtddiv align="center"????????2.input type="file" name="file2" ??????/div/td/tr????????trtddiv align="center"????????3.input type="file" name="file3" ??????/div/td/tr????????trtddiv align="center"????????input type="submit" name="Submit" value="上传他"??????/div/td/tr????/table??/form/body/html

创建Servlet处理上传文件

?

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182

package com.load;?import java.io.IOException;import java.io.PrintWriter;?import javax.servlet.ServletException;import javax.servlet.annotation.WebServlet;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import javax.servlet.jsp.JspFactory;import javax.servlet.jsp.PageContext;?import com.jspsmart.upload.File;import com.jspsmart.upload.SmartUpload;import com.jspsmart.upload.SmartUploadException;@WebServlet("/DouploadServlet")public class DouploadServlet extends HttpServlet {??private static final long serialVersionUID = 1L;???????public DouploadServlet() {????super();??}???protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {????response.setContentType("text/html;charset=UTF-8");????PrintWriter out = response.getWriter();????//新建一个智能上传对象????SmartUpload su = new SmartUpload();????/*?????* PageContext pageContext;??????HttpSession session;??????ServletContext application;??????ServletConfig config;??????JspWriter out;??????Object page = this;??????HttpServletRequest request,??????HttpServletResponse response??????其中page对象,request和response已经完成了实例化,而其它5个没有实例化的对象通过下面的方式实例化??????pageContext = jspxFactory.getPageContext(this, request, response,null, true, 8192, true);?????*/????//通过Jsp工厂类获取上下文环境????PageContext pagecontext = JspFactory.getDefaultFactory().getPageContext(this, request, response, null, true, 8192, true);????//上传初始化????su.initialize(pagecontext);?????//上传文件????try {??????su.upload();??????//将上传文件保存到指定目录??????int count = su.save("/share");??????out.println(count+"个文件上传成功!br"+su.toString());????} catch (SmartUploadException e) {??????e.printStackTrace();????}?????????//逐个提取上传文件信息????for(int i=0;isu.getFiles().getCount();i++){??????File file = su.getFiles().getFile(i);??????//如果文件不存在??????if(file.isMissing()) continue;?????????????//显示当前文件信息??????out.println("table border=1");??????out.println("trtd表单项名(FieldName)/td/td"+file.getFieldName()+"/td/tr");??????out.println("trtd文件长度/tdtd"+file.getSize()+"/td/tr");??????out.println("trtd文件名/tdtd"+file.getFileName()+"/td/tr");??????out.println("trtd文件扩展名/tdtd"+file.getFileExt()+"/td/tr");??????out.println("trtd文件全名/tdtd"+file.getFilePathName()+"/td/tr");??????out.println("/tablebr");????}??}???/**???* @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)???*/??protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {????// TODO Auto-generated method stub????doGet(request, response);??}?}

注意:代码 int count = su.save("/share");表示你需要先建个文件夹,所以你可以先在Webcontent建立一个,然后将项目取消部署,再重新部署进去之后就会在运行那边建立起一个文件夹了!

或者你可以直接找到运行的路径,然后建立share文件夹。

3、实现文件下载

(第一种文件下载)

注意:该代码是直接访问Servlet类的

?

123456789101112131415161718192021222324252627282930313233343536373839404142

package com.load;?import java.io.FileInputStream;import java.io.IOException;import java.io.InputStream;import java.io.OutputStream;?import javax.servlet.ServletException;import javax.servlet.annotation.WebServlet;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;??//直接使用进行下载,但是这个有缺陷,如果下载文件名中有中文,就会变成乱码现象!@WebServlet("/download")public class download extends HttpServlet {??private static final long serialVersionUID = 1L;???public download() {????super();??}??protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {?????response.setContentType("text/plain;charset=utf-8");?????response.setCharacterEncoding("utf-8");?????response.setHeader("Location","中文.txt");?????response.setHeader("Content-Disposition", "attachment; filename=" + "账号.txt");?????OutputStream outputStream = response.getOutputStream();?????InputStream inputStream = new FileInputStream("E:/loads"+"/账号.txt");?????byte[] buffer = new byte[1024];?????int i = -1;?????while ((i = inputStream.read(buffer)) != -1) {?????outputStream.write(buffer, 0, i);?????}?????outputStream.flush();?????outputStream.close();??}??protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {????doGet(request, response);??}?}

(第二种下载方法)

新建jsp页面选择下载

%@ page language="java" contentType="text/html; charset=UTF-8"

??pageEncoding="UTF-8"%!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" ""htmlheadmeta http-equiv="Content-Type" content="text/html; charset=UTF-8"title下载/title/headbody??a href="../DoDownloadServlet?filename=呵呵.txt"点击下载/a/body/html

创建Servlet类进行下载(注意:该下载如果文件名是中文的话,一样会出现乱码现象)

package com.load;

?import java.io.BufferedInputStream;import java.io.File;import java.io.FileInputStream;import java.io.IOException;import java.io.InputStream;import java.io.OutputStream;import java.net.URLEncoder;?import javax.servlet.ServletException;import javax.servlet.annotation.WebServlet;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import javax.servlet.jsp.JspFactory;import javax.servlet.jsp.PageContext;?import org.hsqldb.lib.StringUtil;?import com.jspsmart.upload.SmartUpload;import com.jspsmart.upload.SmartUploadException;?@WebServlet("/DoDownloadServlet")public class DoDownloadServlet extends HttpServlet {??private static final long serialVersionUID = 1L;???public DoDownloadServlet() {????super();??}???protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {????//得到下载文件的名称????//String filename = request.getParameter("filename");????//String filename = new String(FileName.getBytes("iso8859-1"),"UTF-8");????//新建SmartUpload对象????SmartUpload su = new SmartUpload();????PageContext pagecontext = JspFactory.getDefaultFactory().getPageContext(this, request, response, null, true, 8192, true);????//上传初始化????su.initialize(pagecontext);????//设置禁止打开该文件????su.setContentDisposition(null);????//下载文件????try {??????su.downloadFile("/listener/"+filename);????} catch (SmartUploadException e) {??????// TODO Auto-generated catch block??????e.printStackTrace();????}??}???protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {????doGet(request, response);??}}

(第三种下载的方法)

同上的jsp页面代码,这里就不再重复了。

新建Serlvet类,实现下载功能(注意:这里文件名就算是中文名,也不会出现乱码问题了!)

package com.load;

?import java.io.BufferedInputStream;import java.io.File;import java.io.FileInputStream;import java.io.IOException;import java.io.InputStream;import java.io.OutputStream;import java.net.URLEncoder;?import javax.servlet.ServletException;import javax.servlet.annotation.WebServlet;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import javax.servlet.jsp.JspFactory;import javax.servlet.jsp.PageContext;?import org.hsqldb.lib.StringUtil;?import com.jspsmart.upload.SmartUpload;import com.jspsmart.upload.SmartUploadException;?@WebServlet("/DoDownloadServlet")public class DoDownloadServlet extends HttpServlet {??private static final long serialVersionUID = 1L;???public DoDownloadServlet() {????super();??}????protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {????//获得文件名称????String path1 = request.getParameter("filename");????//获得路径名称????String path = request.getSession().getServletContext().getRealPath("/listener/"+path1);?????// path是根据日志路径和文件名拼接出来的?????File file = new File(path);?????String filename = file.getName();????try {???????//判断是否是IE11???????Boolean flag= request.getHeader("User-Agent").indexOf("like Gecko")0;??????//IE11 User-Agent字符串:Mozilla/5.0 (Windows NT 6.1; WOW64; Trident/7.0; rv:11.0) like Gecko??????//IE6~IE10版本的User-Agent字符串:Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.0; Trident/6.0)????????if (request.getHeader("User-Agent").toLowerCase().indexOf("msie") 0||flag){??????????filename = URLEncoder.encode(filename, "UTF-8");//IE浏览器????????}else {????????//先去掉文件名称中的空格,然后转换编码格式为utf-8,保证不出现乱码,????????//这个文件名称用于浏览器的下载框中自动显示的文件名????????filename = new String(filename.replaceAll(" ", "").getBytes("UTF-8"), "ISO8859-1");????????//firefox浏览器????????//firefox浏览器User-Agent字符串:????????//Mozilla/5.0 (Windows NT 6.1; WOW64; rv:36.0) Gecko/20100101 Firefox/36.0????????} InputStream fis = new BufferedInputStream(new FileInputStream(path));????????byte[] buffer;????????buffer = new byte[fis.available()];?????????fis.read(buffer);?????????fis.close();?????????response.reset();?????????response.addHeader("Content-Disposition", "attachment;filename=" +filename);?????????response.addHeader("Content-Length", "" + file.length());?????????OutputStream os = response.getOutputStream();?????????response.setContentType("application/octet-stream");?????????os.write(buffer);// 输出文件?????????os.flush();?????????os.close();???????} catch (IOException e) {????????e.printStackTrace();???????}????????System.out.println(filename);??}???protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {????doGet(request, response);??}}

(责任编辑:IT教学网)

更多

推荐杀毒防毒文章