java浏览器下载文件到本地(java浏览器下载文件到本地打不开)

http://www.itjxue.com  2023-01-29 09:27  来源:未知  点击次数: 

java 关于浏览器下载文件

浏览器默认可以打开图片和文本。word和excel属于文件,浏览器打不开的,你要设置浏览器属性才能默认打开(以前设置过,忘记怎么设置了,自己百度)

JAVA在对.csv类型的文件操作,当用户在用浏览器自带下载框时,如何判断用户点击的是确定还是取消?

没有继续请求下载,就是取消 了。。。。。。。。如果文件不是特别小的话。

linux服务器上部署java项目,本地windos通过浏览器访问项目怎么下载项目目录下的文件到本

既然使用了java,实现这种功能就与OS无关了,否则叫什么跨平台。其实用浏览器下载服务器端文件比较容易:

首先,要让用户能找到并选择文件(jsp里实现,部分代码)

String realPath=request.getSession().getServletContext().getRealPath("")+"/documents";//项目根目录下文件路径

File fileDir=new File(realPath);

String[] fileList=fileDir.list();//返回目录下文件名称数组

for(int i=0;ifileList.length;i++){

//这里遍历出来要显示的文件名,加到td里,后面再加上个“下载”按钮

//使用隐藏input记录文件名和路径fileName,filePath

其次,提交下载请求并下载

使用form提交用户选择的文件名,Action中部分代码:

String fileName=req.getParameter("fileName");//HttpServletRequest req

String filePath=req.getParameter("filePath");

try {

FileDownload.Download(filePath+"/"+fileName, "attachment", res);

} catch (Exception e) {

e.printStackTrace();

}

下面是 FileDownload类:

package com.aerolink.aocs.util.fileUtil;

import java.io.DataInputStream;

import java.io.File;

import java.io.FileInputStream;

import java.io.FileNotFoundException;

import java.io.IOException;

import javax.servlet.ServletOutputStream;

import javax.servlet.http.HttpServletResponse;

/**

* p

* Title: FileDownload类

* /p

* p

* Description: 实现文件下载功能

* /p

* p

* 将文件名,HttpServletRequest,HttpServletRespons传给静态方法Download即可

* /p

* p

* Copyright: Copyright (c) 2005

* /p

* p

* Company: 北京天航信达信息技术有限公司

* /p

*

* @author 陶源

* @version 2.0

*/

public class FileDownload {

/**

* @param fileName

* @param res

* @throws FileNotFoundException

* @throws IOException

*/

public static void Download(String fileName,

HttpServletResponse res)

throws FileNotFoundException, IOException {

String fileContentType = "application/octet-stream";

String fileDownloadType = "attachment";

long totalsize = 0;

// 取得要传输的文件,实际应用是可以将文件路径以参数的形式传入

File f = new File(fileName);

// 取文件长度

long filelength = f.length();

byte[] b = new byte[1024];

// 设置文件输出流

FileInputStream fin = new FileInputStream(f);

DataInputStream in = new DataInputStream(fin);

int pos = fileName.lastIndexOf(java.io.File.separator);

String fn = new String(fileName.substring(pos + 1).getBytes("gb2312"),

"ISO8859-1");

// 设置相应头信息,让下载的文件显示保存信息

res.setContentType(fileContentType);

res.setHeader("Content-Disposition", fileDownloadType + ";filename=\""

+ fn + "\"");

// 确定长度

String filesize = Long.toString(filelength);

// 设置输出文件的长度

res.setHeader("Content-Length", filesize);

// 取得输出流

ServletOutputStream servletOut = res.getOutputStream();

// 发送文件数据,每次1024字节,最后一次单独计算

while (totalsize filelength) {

totalsize += 1024;

if (totalsize filelength) {

// 最后一次传送的字节数

byte[] leftpart = new byte[1024 - (int) (totalsize - filelength)];

// 读入字节数组

in.readFully(leftpart);

// 写入输出流

servletOut.write(leftpart);

} else {

// 读入1024个字节到字节数组 b

in.readFully(b);

// 写和输出流

servletOut.write(b);

}

}

servletOut.close();

}

/**

* @param fileName

* @param fileDownloadType

* @param res

* @throws FileNotFoundException

* @throws IOException

*/

public static void Download(String fileName, String fileDownloadType,

HttpServletResponse res)

throws FileNotFoundException, IOException {

String fileContentType = null;

if (fileName.endsWith(".doc")) {

fileContentType = "application/msword";

} else if (fileName.endsWith(".pdf")) {

fileContentType = "application/pdf";

} else if (fileName.endsWith(".xls")) {

fileContentType = "application/vnd-ms-excel";

} else if (fileName.endsWith(".txt")) {

fileContentType = "text/plain";

} else {

fileContentType = "application/octet-stream";

}

long totalsize = 0;

// 取得要传输的文件,实际应用是可以将文件路径以参数的形式传入

File f = new File(fileName);

// 取文件长度

long filelength = f.length();

byte[] b = new byte[1024];

// 设置文件输出流

FileInputStream fin = new FileInputStream(f);

DataInputStream in = new DataInputStream(fin);

int pos = fileName.lastIndexOf(java.io.File.separator);

String fn = new String(fileName.substring(pos + 1).getBytes("gb2312"),

"ISO8859-1");

// 设置相应头信息,让下载的文件显示保存信息

res.setContentType(fileContentType);

res.setHeader("Content-Disposition", fileDownloadType + ";filename=\""

+ fn + "\"");

// 确定长度

String filesize = Long.toString(filelength);

// 设置输出文件的长度

res.setHeader("Content-Length", filesize);

// 取得输出流

ServletOutputStream servletOut = res.getOutputStream();

// 发送文件数据,每次1024字节,最后一次单独计算

while (totalsize filelength) {

totalsize += 1024;

if (totalsize filelength) {

// 最后一次传送的字节数

byte[] leftpart = new byte[1024 - (int) (totalsize - filelength)];

// 读入字节数组

in.readFully(leftpart);

// 写入输出流

servletOut.write(leftpart);

} else {

// 读入1024个字节到字节数组 b

in.readFully(b);

// 写和输出流

servletOut.write(b);

}

}

servletOut.close();

}

}

java 将页面内容写入excel文件中并可以将其下载到本地任意位置

java本身要生成excel文件必然是在后台做的,通过poi库生成excel文件并制作表格。

无法直接通过网页保存生成excel。

至于下载到本地任意位置,也是后台生成了excel文件发送到前台(浏览器),由用户选择要存在哪儿,不能直接存储(这是web沙箱限制,不允许网页直接访问本地硬盘,不然你想想,如果你打开一个网页,网页代码可以任意访问你的硬盘,你还敢开网页吗)。

要绕过沙箱限制必须装插件,也就是,你必须开发一个com或plugin插件,可以访问本地硬盘,但这需要用户手工安装(比如flash的插件,你之所以能用网页看flash是因为装了它的插件,但这是你手工装的,它不能绕过你直接给你装,它必须询问你行不行,你要手工点了OK,才能装)

(责任编辑:IT教学网)

更多

推荐网站策划文章