`
myCsdn_taoge
  • 浏览: 40572 次
  • 性别: Icon_minigender_1
  • 来自: 沈阳
文章分类
社区版块
存档分类
最新评论

Sevlert 下载文件完整源码

阅读更多

最新在做项目时,遇到这样的一个问题,前端调用servlet 时中文乱码,并且下载下来中文文件名为“--”,后来查询相关资料,完美解决,现贴上代码,给自己做个日记,方便以后查阅!源码如下:

package com.test;

import java.io.BufferedInputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.io.UnsupportedEncodingException;
import java.net.URLEncoder;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.springframework.util.StringUtils;


/**
 * @author lt
 *  文件下载类
 */
public class FileDownloadServlet extends HttpServlet{
	private static final long serialVersionUID = 1L;
	private static final String CONTENT_TYPE = "text/html; charset=UTF-8";   
    public FileDownloadServlet() {
        super();
        // TODO Auto-generated constructor stub
    }

	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		// TODO Auto-generated method stub
		request.setCharacterEncoding("UTF-8");
		doPost(request,response);
	}
	

	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		// TODO Auto-generated method stub
		
		request.setCharacterEncoding("UTF-8");
		
		response.setContentType(CONTENT_TYPE);
              //得到下载文件的名字
		String filename= request.getParameter("filename");
		
		if (filename==null || filename.equals("")) {
		} else {
	        
	        //设置临时文件存储位置
	     	String base = "c:/upload/";
	        
	        //创建file对象
	        File file=new File(base+filename);
	        
	        response.setContentType("application/x-msdownload");
	        //解决中文乱码
	        response.addHeader("Content-Disposition","attachment;filename="+encodingFileName(filename));
	        
	        //写明要下载的文件的大小
	        response.setContentLength((int)file.length());
	        response.addHeader("content-length", Long.toString(file.length()));  

	        //读出文件到i/o流
	        FileInputStream fis=new FileInputStream(file);
	        BufferedInputStream buff=new BufferedInputStream(fis);

	        byte [] b=new byte[1024];//相当于我们的缓存

	        long k=0;//该值用于计算当前实际下载了多少字节

	        //从response对象中得到输出流,准备下载

	        OutputStream out=response.getOutputStream();

	        //开始循环下载

	        while(k<file.length()){

	            int j=buff.read(b,0,1024);
	            k+=j;

	            //将b中的数据写到客户端的内存
	            out.write(b,0,j);

	        }

	        //将写入到客户端的内存的数据,刷新到磁盘
	        out.flush();
		}
      
	}
	
	  
	public static String encodingFileName(String fileName) { 
	        String returnFileName = ""; 
	        try { 
	            returnFileName = URLEncoder.encode(fileName, "UTF-8"); 
	            returnFileName = StringUtils.replace(returnFileName, "+", "%20"); 
	            if (returnFileName.length() > 150) { 
	                returnFileName = new String(fileName.getBytes("GB2312"), "ISO8859-1"); 
	                returnFileName = StringUtils.replace(returnFileName, " ", "%20"); 
	            } 
	        } catch (UnsupportedEncodingException e) { 
	            e.printStackTrace(); 
	           
	        } 
	        return returnFileName; 
	    } 

}

 前端js,直接传递中文文件名,传不过去,不知道什么原因,但是如果传递的是数字,可以传递过去

cell.innerHTML = '<a href="javascript:void(0);" onClick="downLoadFile(this)">'+fjInfo.FILE_NAME+'</a>';

 所以想了一个这种的办法,传递this

function downLoadFile(obj){
	var fileName=obj.innerHTML;
	fileName= encodeURIComponent(fileName);
	location.href='FileDownloadServlet.htm?filename='+fileName;
	
}

 

分享到:
评论

相关推荐

    基于Python+Django简单实现文件上传下载功能源码.zip

    基于Python+Django简单实现文件上传下载功能源码 基于Python+Django简单实现文件上传下载功能源码 基于Python+Django简单实现文件上传下载功能源码 基于Python+Django简单实现文件上传下载功能源码 基于...

    vscode源码文件 vscode源码文件 vscode源码文件

    vscode源码文件vscode源码文件vscode源码文件 vscode源码文件vscode源码文件vscode源码文件 vscode源码文件vscode源码文件vscode源码文件 vscode源码文件vscode源码文件vscode源码文件 vscode源码文件vscode源码文件...

    PHP WEB文件管理源码

    此外,提供的文件如"源码下载.txt"可能包含获取和安装源码的说明,而".txt"和".url"文件可能是文档链接或教程资源,帮助用户更好地理解和使用该源码。"Explore"可能是一个用于探索系统结构或功能的目录,包含更多源...

    yolov8完整源码+权重文件

    在提供的压缩包"yolov8完整源码+权重文件"中,你将获得以下关键资源: 1. **源码**:这通常包括用Python编写的训练和推理代码,可能使用了深度学习框架如TensorFlow或PyTorch。源码将展示如何加载数据集、预处理...

    PHPCMS资源网站源码软件源码下载站网站源码下载.zip

    PHPCMS资源网站源码软件源码下载站网站源码下载.zip

    H5消消乐完整源码下载

    在"压缩包子文件的文件名称列表"中,"Html5游戏《城市消消乐》完整源码下载"可能是包含所有游戏相关文件的主目录,其中可能有HTML文件(游戏页面结构)、CSS文件(样式定义)、JavaScript文件(游戏逻辑)、图像资源...

    易语言源码易语言远程服务文件传输源码.rar

    易语言源码易语言远程服务文件传输源码.rar 易语言源码易语言远程服务文件传输源码.rar 易语言源码易语言远程服务文件传输源码.rar 易语言源码易语言远程服务文件传输源码.rar 易语言源码易语言远程服务文件传输...

    springboot+vue实现超大文件分片极速上传与下载完整前后端源码

    在本项目中,"springboot+vue实现超大文件分片极速上传与下载完整前后端源码" 是一个综合性的IT应用,它结合了Spring Boot后端框架与Vue.js前端框架,旨在创建一个高效、可靠的文件管理系统。这个系统能够处理大容量...

    一个ASP服务器文件管理源码

    一个ASP服务器文件管理源码,只有40K,功能强大,可通过本ASP源码对服务器上的文件进行上传、下载、删除、压缩等操作,还可以直接渗透至其他硬盘驱动器(C盘、D盘、E盘等),本软件转自网络,请勿作它用。

    m3u8网络视频文件下载器VB6源码

    m3u8网络视频文件下载器VB6源码,vb下载m3u8文件,m3u8,m3u8文件下载源码,VB下载m3u8文件,vb6实现m3u8文件下载m3u8网络视频文件下载器VB6源码,vb下载m3u8文件,m3u8,m3u8文件下载源码,VB下载m3u8文件,vb6实现m3u8...

    [上传下载]多文件上传源码_mutifileupload.zip源码ASP.NET网站源码打包下载

    [上传下载]多文件上传源码_mutifileupload.zip源码ASP.NET网站源码打包下载[上传下载]多文件上传源码_mutifileupload.zip源码ASP.NET网站源码打包下载[上传下载]多文件上传源码_mutifileupload.zip源码ASP.NET网站...

    Unity3D参赛作品《史莱姆世界》完整项目源码下载-LD24_SlimeWorld_ProjectFile

    Unity3D参赛作品《史莱姆世界》完整项目源码下载-LD24_SlimeWorld_ProjectFileUnity3D参赛作品《史莱姆世界》完整项目源码下载-LD24_SlimeWorld_ProjectFileUnity3D参赛作品《史莱姆世界》完整项目源码下载-LD24_...

    (注册登录+文件上传下载+数据库) 完整源码(SSM整合项目)

    内容包含:一个注册登录+文件上传下载+数据库文件,代码一起打包在文件里。 开发环境:Eclipse+Tomcat9.0.58 SSM整合项目 登录注册就比较简单,数据提交用的就是普通的提交方式。主要使用到的技术:Spring+SpringMVC...

    最新某源码交易平台虚拟交易付费下载系统+V2.25+完整开源版源码

    该资源是一个名为“某源码交易平台”的虚拟交易付费下载系统的最新V2.25完整开源版。这个系统专为创建一个平台而设计,允许用户购买和下载各种虚拟商品,如网站源码、软件、模板等。以下是这个系统可能包含的关键...

    2023最新仿蓝奏云合集下载页面系统源码 带后台版本

    2023最新仿蓝奏云合集下载页面系统源码 带后台版本 新版仿蓝奏云合集下载页源码续上次发的仿蓝奏云合集下载单页源码 修复了搜索功能 修复无法下载文件和下载文件为空 更新功能如下 1.增加后台 2.可在后台上传文件及...

    高速异步电机空间矢量变频器,软硬件设计文件,单片机完整项目文件工程源码

    高速异步电机空间矢量变频器,软硬件设计文件,单片机完整项目文件工程源码 高速异步电机空间矢量变频器,软硬件设计文件,单片机完整项目文件工程源码 高速异步电机空间矢量变频器,软硬件设计文件,单片机完整项目...

    素材模板源码资源付费下载站源码+带用户中心和VIP充值系统+积分金币下载

    素材模板源码资源付费下载站源码,带有用户中心和 VIP 充值系统,后台管理+素材下载+积分金币下载,织梦内核二开的资源付费下载系统源码。 本站亲测完美无错,搭建后略微配置即可运营,切记导入数据库后,进去系统...

    PHP隐藏文件真实下载地址源码/支持超大文件断点续传

    非常简单完整全开源的一款关于隐藏文件真实下载地址的PHP程序源码。 1、你服务器上有什么文件供别人下载的,但是又不想显示出路径,那么此源码将是你的不二之选 2、你服务器上的文件,需要授权后,才能下载,那么,此...

    获取网站完整源码工具

    在IT行业中,获取网站完整源码是常见的需求,尤其对于开发者和网站维护者而言。"获取网站完整源码工具"正是解决这一问题的有效途径。这类工具可以帮助用户抓取网页的HTML、CSS、JavaScript以及其他相关资源,如图片...

    Django框架开发的个人网站完整源码集合

    项目概述:基于Python的Django框架开发的个人网站,包含完整的源码集合。该项目融合了多种编程语言,主要包括Python,同时涵盖了JavaScript、CSS、HTML以及少量的PHP。整个项目共包含2400个文件,其中具体文件类型...

Global site tag (gtag.js) - Google Analytics