首先,要让用户能找到并选择文件(jsp里实现,部分代码)
String realPath=request.getSession().getServletContext().getRealPath("")+"/documents"//项目根目录下文件路径
File fileDir=new File(realPath)
String[] fileList=fileDir.list()//返回目录下文件名称数组
for(int i=0i<fileList.lengthi++){
//这里遍历出来要显示的文件名,加到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()
}
}
使用BAT下载Linux,可以先去官网下载相应的Linux安装文件,比如Ubuntu、CentOS等,然后使用BT下载工具将文件下载到本地。也可以进行网络安装,即使用BAT将远程安装ISO文件下载到本地,并使用CD或USB安装到本地硬盘上。可以直接使用lrzsz工具即可完成,首先需要安装这个软件,yim install lrzsz -y.然后把想要下载到本地的文件执行 sz a.txt,就可以直接另存到本地了。
如果你想上传到linux服务器,可以直接拖拽文件到想要的目录即可,即可直接上传。
除了这个方法之外,还可以使用vsftp工具来下载文件,前提是搭建vsftp工具,开启21.22端口访问,然后本地通过ftp工具进行连接即可直接和linux服务器通信了。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)