当前位置:首页 » 网页前端 » web文件下载
扩展阅读
webinf下怎么引入js 2023-08-31 21:54:13
堡垒机怎么打开web 2023-08-31 21:54:11

web文件下载

发布时间: 2022-01-16 18:25:41

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

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

*@paramresp HttpServletResponse
*@paramfile 供下载的文件
*@paramfile_name 所显示的下载文件名称

*/
publicvoidFileDownLoad(HttpServletResponseresp,Filefile,Stringfile_name){
try{
StringfileName=newString(file_name.getBytes("GBK"),"ISO8859_1");
resp.setContentType("application;charset=utf-8"); //指定文件的保存类型。

resp.setHeader("Content-disposition","attachment;filename="+fileName);
ServletOutputStreamoupstream=resp.getOutputStream();
FileInputStreamfrom=newFileInputStream(file);
byte[]buffer=newbyte[catchSize];
intbytes_read;
while((bytes_read=from.read(buffer))!=-1){
oupstream.write(buffer,0,bytes_read);
}
oupstream.flush();
}catch(Exceptione){

}
}

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

‘贰’ 【Java Web】文件下载方式有哪些,以及利弊

直接下载的不太安全,用户会看见你的路径的 这个不太好

字节流的安全 而且文件位置任意放 一般都是配置在属性文件里的 愿意放拿就放哪 ,但是也有点问题,上次我就遇到过一个 日文乱码的 至今没有解决

‘叁’ JavaWeb下载文件,怎么获取文件下载完毕的状态

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

1、搭建环境

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

3、实现文件下载

(第一种文件下载)

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

?

04142package 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;//直接使用Http://localhost:8080/Test1/download进行下载,但是这个有缺陷,如果下载文件名中有中文,就会变成乱码现象!@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" "http://www.w3.org/TR/html4/loose.dtd"><html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><title>下载</title></head><body><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 blocke.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 {//判断是否是IE11Boolean 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);}}

‘肆’ 请推荐一个支持web文件下载的虚拟主机

中国尚网有国内虚拟主机、美国的虚拟主机,全能空间。

‘伍’ java web 工程实现文件下载功能的问题

亲,你说的啥意思啊?

“怎样才能让这里的名称也可以正常显示? ”??现在有名称不正常么??

你是说保存的文件名?

1)http头当中确实需要指定当前返回的是文件,才能让浏览器按照文件识别,但是你说你写了setheader,就应该知道 默认文件名也是在这里写的,所以你说“不正常”就很难明白了。
2)迅雷的任务栏里有没有同名文件,你是拿不到的,那不是B/S结构能处理的东西。当然你可以写一个插件来处理,不过这东西一点都不简单。举个栗子,如果你的java(也就是服务器)能够知道用户的迅雷里有什么,那么用户那儿还有啥你不知道的,岂不是登录你的网站我下了多少毛片都被你晓得了?
3)你看到的有些东西是迅雷处理的,建议你把迅雷的插件关闭了,先把其他功能弄完整了再把迅雷加上。

‘陆’ web做一个下载功能 求代码

WebView控制调用相应的WEB页面进行展示。当碰到页面有下载链接的时候,点击上去是一点反应都没有的。原来是因为WebView默认没有开启文件下载的功能,如果要实现文件下载的功能,需要设置WebView的DownloadListener,通过实现自己的DownloadListener来实现文件的下载。具体操作如下:

1、设置WebView的DownloadListener:
webView.setDownloadListener(new MyWebViewDownLoadListener());

2、实现MyWebViewDownLoadListener这个类,具体可以如下这样:

Java代码
private class MyWebViewDownLoadListener implements DownloadListener{

@Override
public void onDownloadStart(String url, String userAgent, String contentDisposition, String mimetype,
long contentLength) {
Log.i("tag", "url="+url);
Log.i("tag", "userAgent="+userAgent);
Log.i("tag", "contentDisposition="+contentDisposition);
Log.i("tag", "mimetype="+mimetype);
Log.i("tag", "contentLength="+contentLength);
Uri uri = Uri.parse(url);
Intent intent = new Intent(Intent.ACTION_VIEW, uri);
startActivity(intent);
}
}
[java] view plain
private class MyWebViewDownLoadListener implements DownloadListener{

@Override
public void onDownloadStart(String url, String userAgent, String contentDisposition, String mimetype,
long contentLength) {
Log.i("tag", "url="+url);
Log.i("tag", "userAgent="+userAgent);
Log.i("tag", "contentDisposition="+contentDisposition);
Log.i("tag", "mimetype="+mimetype);
Log.i("tag", "contentLength="+contentLength);
Uri uri = Uri.parse(url);
Intent intent = new Intent(Intent.ACTION_VIEW, uri);
startActivity(intent);
}
}

这只是调用系统中已经内置的浏览器进行下载,还没有WebView本身进行的文件下载,不过,这也基本上满足我们的应用场景了。

我在项目中的运用
项目要求这样:
1,需要使用WebView加载一个网页;
2,网页中有文件下载的链接,点击后需要下载文件到SDcard;
3,然后自动打开文件;
下面是具体解决办法
第一步,对WebView进行一系列设置。

Java代码
WebView webview=(WebView)layout.findViewById(R.id.webview);
webview.getSettings().setJavaScriptEnabled(true);
webview.setWebChromeClient(new MyWebChromeClient());
webview.requestFocus();
// webview.loadUrl("file:///android_asset/risktest.html");
webview.loadUrl(jcrs_sub.get(position).addr);
// 设置web视图客户端
webview.setWebViewClient(new MyWebViewClient());
webview.setDownloadListener(new MyWebViewDownLoadListener());

//内部类
public class MyWebViewClient extends WebViewClient {
// 如果页面中链接,如果希望点击链接继续在当前browser中响应,
// 而不是新开Android的系统browser中响应该链接,必须覆盖 webview的WebViewClient对象。
public boolean shouldOverviewUrlLoading(WebView view, String url) {
L.i("shouldOverviewUrlLoading");
view.loadUrl(url);
return true;
}

public void onPageStarted(WebView view, String url, Bitmap favicon) {
L.i("onPageStarted");
showProgress();
}

public void onPageFinished(WebView view, String url) {
L.i("onPageFinished");
closeProgress();
}

public void onReceivedError(WebView view, int errorCode,
String description, String failingUrl) {
L.i("onReceivedError");
closeProgress();
}
}

// 如果不做任何处理,浏览网页,点击系统“Back”键,整个Browser会调用finish()而结束自身,
// 如果希望浏览的网 页回退而不是推出浏览器,需要在当前Activity中处理并消费掉该Back事件。
public boolean onKeyDown(int keyCode, KeyEvent event) {
// if((keyCode==KeyEvent.KEYCODE_BACK)&&webview.canGoBack()){
// webview.goBack();
// return true;
// }
return false;
}
[java] view plain
WebView webview=(WebView)layout.findViewById(R.id.webview);
webview.getSettings().setJavaScriptEnabled(true);
webview.setWebChromeClient(new MyWebChromeClient());
webview.requestFocus();
// webview.loadUrl("file:///android_asset/risktest.html");
webview.loadUrl(jcrs_sub.get(position).addr);
// 设置web视图客户端
webview.setWebViewClient(new MyWebViewClient());
webview.setDownloadListener(new MyWebViewDownLoadListener());

//内部类
public class MyWebViewClient extends WebViewClient {
// 如果页面中链接,如果希望点击链接继续在当前browser中响应,
// 而不是新开Android的系统browser中响应该链接,必须覆盖 webview的WebViewClient对象。
public boolean shouldOverviewUrlLoading(WebView view, String url) {
L.i("shouldOverviewUrlLoading");
view.loadUrl(url);
return true;
}

public void onPageStarted(WebView view, String url, Bitmap favicon) {
L.i("onPageStarted");
showProgress();
}

public void onPageFinished(WebView view, String url) {
L.i("onPageFinished");
closeProgress();
}

public void onReceivedError(WebView view, int errorCode,
String description, String failingUrl) {
L.i("onReceivedError");
closeProgress();
}
}

// 如果不做任何处理,浏览网页,点击系统“Back”键,整个Browser会调用finish()而结束自身,
// 如果希望浏览的网 页回退而不是推出浏览器,需要在当前Activity中处理并消费掉该Back事件。
public boolean onKeyDown(int keyCode, KeyEvent event) {
// if((keyCode==KeyEvent.KEYCODE_BACK)&&webview.canGoBack()){
// webview.goBack();
// return true;
// }
return false;
}

第二步,起线程开始下载文件。

Java代码
//内部类
private class MyWebViewDownLoadListener implements DownloadListener {

@Override
public void onDownloadStart(String url, String userAgent, String contentDisposition, String mimetype,
long contentLength) {
if(!Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)){
Toast t=Toast.makeText(mContext, "需要SD卡。", Toast.LENGTH_LONG);
t.setGravity(Gravity.CENTER, 0, 0);
t.show();
return;
}
DownloaderTask task=new DownloaderTask();
task.execute(url);
}

}
//内部类
private class DownloaderTask extends AsyncTask<String, Void, String> {

public DownloaderTask() {
}

@Override
protected String doInBackground(String... params) {
// TODO Auto-generated method stub
String url=params[0];
// Log.i("tag", "url="+url);
String fileName=url.substring(url.lastIndexOf("/")+1);
fileName=URLDecoder.decode(fileName);
Log.i("tag", "fileName="+fileName);

File directory=Environment.getExternalStorageDirectory();
File file=new File(directory,fileName);
if(file.exists()){
Log.i("tag", "The file has already exists.");
return fileName;
}
try {
HttpClient client = new DefaultHttpClient();
// client.getParams().setIntParameter("http.socket.timeout",3000);//设置超时
HttpGet get = new HttpGet(url);
HttpResponse response = client.execute(get);
if(HttpStatus.SC_OK==response.getStatusLine().getStatusCode()){
HttpEntity entity = response.getEntity();
InputStream input = entity.getContent();

writeToSDCard(fileName,input);

input.close();
// entity.consumeContent();
return fileName;
}else{
return null;
}
} catch (Exception e) {
e.printStackTrace();
return null;
}
}

@Override
protected void onCancelled() {
// TODO Auto-generated method stub
super.onCancelled();
}

@Override
protected void onPostExecute(String result) {
// TODO Auto-generated method stub
super.onPostExecute(result);
closeProgressDialog();
if(result==null){
Toast t=Toast.makeText(mContext, "连接错误!请稍后再试!", Toast.LENGTH_LONG);
t.setGravity(Gravity.CENTER, 0, 0);
t.show();
return;
}

Toast t=Toast.makeText(mContext, "已保存到SD卡。", Toast.LENGTH_LONG);
t.setGravity(Gravity.CENTER, 0, 0);
t.show();
File directory=Environment.getExternalStorageDirectory();
File file=new File(directory,result);
Log.i("tag", "Path="+file.getAbsolutePath());

Intent intent = getFileIntent(file);

startActivity(intent);

}

@Override
protected void onPreExecute() {
// TODO Auto-generated method stub
super.onPreExecute();
showProgressDialog();
}

@Override
protected void onProgressUpdate(Void... values) {
// TODO Auto-generated method stub
super.onProgressUpdate(values);
}

}

‘柒’ 怎样用web迅雷下载文件

把你的MP4接到电脑上面,把你需要的东西直接复制进去就可以了

‘捌’ wlsetup-web 下载文件到哪里

C:\Program Files\Common Files\Windows Live\.cache\目录中的那些全部都是

‘玖’ 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

‘拾’ 求JAVA WEB项目文件夹上传下载方法

两种实现方式,一种是借助FTP服务器实现上传下载,引入相应的jar包,直接拷贝网上现成的代码,另一种通过原生的代码,读取文件夹及里面的文件,通过io流处理,存放到指定地址,或数据库设计一个大字段,存放二进制流数据