linux服务器上部署java项目,本地windos通过浏览器访问项目怎么下载项目目录下的文件到本
既然使用了java,实现这种功能就与OS无关了,否则叫什么跨平台。其实用浏览器下载服务器端文件比较容易:
首先,要让用户能找到并选择文件(jsp里实现,部分代码)
String realPath=requestgetSession()getServletContext()getRealPath("")+"/documents";//项目根目录下文件路径
File fileDir=new File(realPath);
String[] fileList=fileDirlist();//返回目录下文件名称数组
for(int i=0;i<fileListlength;i++){
//这里遍历出来要显示的文件名,加到td里,后面再加上个“下载”按钮
//使用隐藏input记录文件名和路径fileName,filePath
}
其次,提交下载请求并下载
使用form提交用户选择的文件名,Action中部分代码:
String fileName=reqgetParameter("fileName");//HttpServletRequest req
String filePath=reqgetParameter("filePath");
try {
FileDownloadDownload(filePath+"/"+fileName, "attachment", res);
} catch (Exception e) {
eprintStackTrace();
}
下面是 FileDownload类:
package comaerolinkaocsutilfileUtil;
import javaioDataInputStream;
import javaioFile;
import javaioFileInputStream;
import javaioFileNotFoundException;
import javaioIOException;
import javaxservletServletOutputStream;
import javaxservlethttpHttpServletResponse;
/
<p>
Title: FileDownload类
</p>
<p>
Description: 实现文件下载功能
</p>
<p>
将文件名,HttpServletRequest,HttpServletRespons传给静态方法Download即可
</p>
<p>
Copyright: Copyright (c) 2005
</p>
<p>
Company: 北京天航信达信息技术有限公司
</p>
@author 陶源
@version 20
/
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 = flength();
byte[] b = new byte[1024];
// 设置文件输出流
FileInputStream fin = new FileInputStream(f);
DataInputStream in = new DataInputStream(fin);
int pos = fileNamelastIndexOf(javaioFileseparator);
String fn = new String(fileNamesubstring(pos + 1)getBytes("gb2312"),
"ISO8859-1");
// 设置相应头信息,让下载的文件显示保存信息
ressetContentType(fileContentType);
ressetHeader("Content-Disposition", fileDownloadType + ";filename=\""
+ fn + "\"");
// 确定长度
String filesize = LongtoString(filelength);
// 设置输出文件的长度
ressetHeader("Content-Length", filesize);
// 取得输出流
ServletOutputStream servletOut = resgetOutputStream();
// 发送文件数据,每次1024字节,最后一次单独计算
while (totalsize < filelength) {
totalsize += 1024;
if (totalsize > filelength) {
// 最后一次传送的字节数
byte[] leftpart = new byte[1024 - (int) (totalsize - filelength)];
// 读入字节数组
inreadFully(leftpart);
// 写入输出流
servletOutwrite(leftpart);
} else {
// 读入1024个字节到字节数组 b
inreadFully(b);
// 写和输出流
servletOutwrite(b);
}
}
servletOutclose();
}
/
@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 (fileNameendsWith("doc")) {
fileContentType = "application/msword";
} else if (fileNameendsWith("pdf")) {
fileContentType = "application/pdf";
} else if (fileNameendsWith("xls")) {
fileContentType = "application/vnd-ms-excel";
} else if (fileNameendsWith("txt")) {
fileContentType = "text/plain";
} else {
fileContentType = "application/octet-stream";
}
long totalsize = 0;
// 取得要传输的文件,实际应用是可以将文件路径以参数的形式传入
File f = new File(fileName);
// 取文件长度
long filelength = flength();
byte[] b = new byte[1024];
// 设置文件输出流
FileInputStream fin = new FileInputStream(f);
DataInputStream in = new DataInputStream(fin);
int pos = fileNamelastIndexOf(javaioFileseparator);
String fn = new String(fileNamesubstring(pos + 1)getBytes("gb2312"),
"ISO8859-1");
// 设置相应头信息,让下载的文件显示保存信息
ressetContentType(fileContentType);
ressetHeader("Content-Disposition", fileDownloadType + ";filename=\""
+ fn + "\"");
// 确定长度
String filesize = LongtoString(filelength);
// 设置输出文件的长度
ressetHeader("Content-Length", filesize);
// 取得输出流
ServletOutputStream servletOut = resgetOutputStream();
// 发送文件数据,每次1024字节,最后一次单独计算
while (totalsize < filelength) {
totalsize += 1024;
if (totalsize > filelength) {
// 最后一次传送的字节数
byte[] leftpart = new byte[1024 - (int) (totalsize - filelength)];
// 读入字节数组
inreadFully(leftpart);
// 写入输出流
servletOutwrite(leftpart);
} else {
// 读入1024个字节到字节数组 b
inreadFully(b);
// 写和输出流
servletOutwrite(b);
}
}
servletOutclose();
}
}
linux与linux之间传送文件:
scp file username@hostIP:文件地址 例:
scp abctxt endall@IP:/home/endall/abctxt
windows与linux之间传送文件:
笔者用putty的内置PSCP。其它如 SSH Secure File Transfer Client
先在WIN的DOS下,PUTTY目录下及PSCP文件所在目录。
pscp file username@hostIP:文件地址
例:pscp d:abctxt endall@IP:/home/endall/abctxt
pscp endall@IP:/home/endall/abctxt d:abc
linux到windows类似
windows如何用 putty的 psftp 从 linux上传与下载
windows 下运行 psftpexe ,登录后改变在linux下的目录:
cd /usr/
改变在windows下上传和下载的目录:
lcd d:/
这个目录在 psftp 中不能列出来,我觉得这点不太好,如果不改变的话就是默认putty的安装目录,默认下载到这儿,上传的文件也是要在这个文件夹里面
比如在 d:盘有一个 5rmvb
上传文件到linux: psftp > put 5rmvb
这个命令会把 d:\5rmvb 上传到 /usr/5rmvb
从linux下载文件: psftp > get 4rmvb
这个命令会把 /usr/4rmvb 下载到 d:\4rmvb
用 这个命令 吧
scp 可以在 2个 linux 主机间复制文件;
命令基本格式:
scp [可选参数] file_source file_target
======
从 本地 复制到 远程
======
复制文件:
命令格式:
scp local_file remote_username@remote_ip:remote_folder
或者
scp local_file remote_username@remote_ip:remote_file
或者
scp local_file remote_ip:remote_folder
或者
scp local_file remote_ip:remote_file
第1,2个指定了用户名,命令执行后需要再输入密码,第1个仅指定了远程的目录,文件名字不变,第2个指定了文件名;
第3,4个没有指定用户名,命令执行后需要输入用户名和密码,第3个仅指定了远程的目录,文件名字不变,第4个指定了文件名;
例子:
scp /home/space/music/1mp3 root@wwwcumteducn:/home/root/others/music
scp /home/space/music/1mp3 root@wwwcumteducn:/home/root/others/music/001mp3
scp /home/space/music/1mp3 wwwcumteducn:/home/root/others/music
scp /home/space/music/1mp3 wwwcumteducn:/home/root/others/music/001mp3
linux的文件拷贝到windows的具体操作步骤如下:
1、百度搜索filezilla官网,ftp客户端和ftp服务端软件,选用客户端即可。
2、进入filezilla官网,下载64位安装版,选择系统32位。
3、安装完成,windows开始菜单,找到filezilla软件,点击即可启动程序。
4、输入linux主机的ip地址,用户名,密码,以及22端口,点击连接即可登陆。
5、在linux相应的目录,找到文件或目录,文件右击下载即可,选择文件存放的目录。
6、linux上的文件即可拷贝到windows。
0条评论