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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了linux服务器上部署java项目,本地windos通过浏览器访问项目怎么下载项目目录下的文件到本相关的知识,希望对你有一定的参考价值。

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;i<fileList.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();

参考技术A <a href=文件路径> file</a> 参考技术B Linux服务器上部署个FTP。追问

类似项目根目录下有个文件

我要通过访问浏览器的方式下载它

和你电脑访问百度下载东西一样的,怎么http访问?

追答

浏览器的话用FTP开头,不是很方便。最好用个FTP客户端访问。

追问

多个人访问都装那不累死

追答

需要密码吗?不需要密码的话还是不用客户端方便。

追问

就和你在百度下载东西一样

我想做成这种

你百度下载东西还用ftp啊

追答

那http呗。服务端就一个Apache就行了。客户端用浏览器

参考技术C ftp> get [remote-file] [local-file]

以上是关于linux服务器上部署java项目,本地windos通过浏览器访问项目怎么下载项目目录下的文件到本的主要内容,如果未能解决你的问题,请参考以下文章

java工程运行报错 在本地没问题 部署到服务器上就出错

如何将Java Web项目部署到服务器上

linux oracle 运行不了sqlldr 怎么办?windos下连接该数据库能行,部署到linux下就不行

Linux学习8-CentOS部署自己本地的django项目

部署jar包项目到服务器上

windows开发的java项目如何部署到Linux上