怎样通过java实现服务器上文件下载?

怎样通过java实现服务器上文件下载?,第1张

在jsp/servlet中断点/多线程下载文件

<%@ page import="javaioFile" %>

<%@ page import="javaioIOException" %>

<%@ page import="javaioOutputStream" %>

<%@ page import="javaioRandomAccessFile" %>

<%!

    public void downloadFile(HttpServletRequest request, HttpServletResponse response, File file) throws IOException {

        RandomAccessFile raf = new RandomAccessFile(file, "r");

        javaioFileInputStream fis = new javaioFileInputStream(rafgetFD());

        responsesetHeader("Server", "wwwtrydonecom");

        responsesetHeader("Accept-Ranges", "bytes");

        long pos = 0;

        long len;

        len = raflength();

        if (requestgetHeader("Range") != null) {

            responsesetStatus(HttpServletResponseSC_PARTIAL_CONTENT);

            pos = LongparseLong(requestgetHeader("Range")

                    replaceAll("bytes=", "")

                    replaceAll("-", "")

            );

        }

        responsesetHeader("Content-Length", LongtoString(len - pos));

        if (pos != 0) {

            responsesetHeader("Content-Range", new StringBuffer()

                    append("bytes ")

                    append(pos)

                    append("-")

                    append(LongtoString(len - 1))

                    append("/")

                    append(len)

                    toString()

            );

        }

        responsesetContentType("application/octet-stream");

        responsesetHeader("Content-Disposition", new StringBuffer()

                append("attachment;filename=\"")

                append(filegetName())

                append("\"")toString());

        rafseek(pos);

        byte[] b = new byte[2048];

        int i;

        OutputStream outs = responsegetOutputStream();

        while ((i = rafread(b)) != -1) {

            outswrite(b, 0, i);

        }

        rafclose();

        fisclose();

    }

%>

<%

    String filePath = requestgetParameter("file");

    filePath = applicationgetRealPath(filePath);

    File file = new File(filePath);

    downloadFile(request, response, file);

%>

1由于服务器配置比较低综合考虑,选择ubuntu系统进行搭建

2 登陆阿里云服务器:

方法一:使用xshell软件登陆服务器

主机填写ip地址

端口号选择22

连接登陆服务器

方法二:使用阿里云管理终端

ssh root@服务器ip地址

password:输入密码

3如何上传文件

方法一:windows和linux上传或下载某个文件可以使用rz,sz

sudo apt-get install lrzsz

安装完成后进入准备存放改文件的文件夹输入rz,就会跳出文件选择框

例如:#cd apache-tomcat-7069/bin  rz

cd后有空格

cd ~:返回最上层

cd :返回上一层

cd -:返回最近操作 

方法二:使用xshell中的插件Xftp

4安装及配置环境

安装lsb指令

ubunu快捷安装需要的命令,更新一下:

自带源在大陆不好,更新即可解决

1sudo apt-get update  

2apt-get install yum  yum install -y redhat-lsb

输入lsb指令查看当前版本 

查看版本号

lsb_release -a查看当前位数

getconf LONG_BIT

安装jdk:

方法一:ubuntu自动安装jdk

sudo apt-get install jdk

安装完成后配置环境:

使用vim指定编辑etc目录下profile文件,添加export

#vim /etc/profile

添加进profile文件

JAVA_HOME=/home/java/jdk160_12

export JRE_HOME=/home/liujicheng/java/jdk160_12/jre

export CLASSPATH=:$JAVA_HOME/lib:$JRE_HOME/lib:$CLASSPATH

export PATH=$JAVA_HOME/bin:$JRE_HOME/bin:$PATH

//java存放位置请自行更改

//使用 which java 查看jdk所在文件夹

方法二:本地下载jdk上传

下载对应系统32位或64位的targz文件

建议:经过还几次对服务器进行环境搭建,已经有了一点小小的见解,建议不要使用过低版本的JDK,例如服务器JDK版本为15而项目JDK版本为18的情况,就会出现无法服务器无法运行war文件的情况,建议版本为17

上传targz文件有两种方法

11输入命令行 rz 选择安装包上传1使用rz时,注意安装 2通过xftp将上传

创建一个java文件夹

mkdir java

输入安装命令,将上传的targz文件解压到创建为java文件夹中

sudo tar -zxvf jdk-7u80-linux-x64targz -C /root/java

设置环境变量

使用vim指定编辑etc目录下profile文件,添加export

#vim /etc/profile添加进profile文件

JAVA_HOME=/root/java/jdk170_80

export JRE_HOME=/root/java/jdk170_80/jre

export CLASSPATH=:$JAVA_HOME/lib:$JRE_HOME/lib:$CLASSPATH

export PATH=$JAVA_HOME/bin:$JRE_HOME/bin:$PATH

//java存放位置请自行更改//使用 which java 查看jdk所在文件夹

选择E,然后输入i 进行写操作

最后 :x退出并保存

设置默认JDK

12345sudo update-alternatives --install /usr/bin/java java /root/java/jdk170_80/bin/java 300 sudo update-alternatives --install /usr/bin/javac javac /root/java/jdk170_80/bin/javac 300 sudo update-alternatives --install /usr/bin/jar jar /root/java/jdk170_80/bin/jar 300  sudo update-alternatives --install /usr/bin/javah javah /root/java/jdk170_80/bin/javah 300  sudo update-alternatives --install /usr/bin/javap javap /root/java/jdk170_80/bin/javap 300

如果之后一个版本显示: 

There is only one alternative in link group java (providing /usr/bin/java):

/usr/lib/jvm/jdk170_60/bin/java

否者,选择合适的jdk

检查jdk是否安装成功,输出版本号及对应信息即安装成功

#java

#javac

#java -version

安装tomcat

方法一:ubuntu自动安装tomcat

sudo apt-get install tomcat

添加jdk和jre环境变量

JAVA_HOME=/home/java/jdk160_12

JRE_HOME=/home/homer/eclipse/jdk160_12/jre  

PATH=$JAVA_HOME/bin:$JRE_HOME:$PATH  

CLASSPATH=:$JAVA_HOME/lib/dtjar:$JAVA_HOME/lib/toolsjar  

TOMCAT_HOME=/opt/apache-tomcat-7029  

启动tomcat

cd apache-tomcat-7069/bin /startupsh

出现提示说明配置成功

方法二:上传tomcat并解压

通过上述上传文件方法上传后

使用tar指令解压

tar -zxvf apache-tomcat-8024targz

然后进入apache-tomcat-7069文件夹

# cd apache-tomcat-8024 /bin/

启动tomcat

cd apache-tomcat-8024 /bin/ /startupsh

显示如下说明成功

最后输入:http://xxxx:8080/   (x代表ip地址),显示tomcat首页说明配置成功

安装Mysql

ubuntu下自动安装

sudo apt-get install mysql-server

apt-get install mysql-client

sudo apt-get install libmysqlclient-dev

设置数据库密码:

检查Mysql是否安装成功

sudo netstat -tap | grep mysql

登陆Mysql

mysql -uroot -p密码

成功:

查看数据库

show databases

将sql文件导入

//先选定数据库

use iswust        

source /root/testsql//source /文件夹/sql文件名

select from score

5java工程打包上传并运行

右键选中java项目,WAR Export 将文件以war格式导出

(注意:java工程的jdk一定要先降低到与服务器的jdk版本相同,例如java工程为18而服务器为16则会报错)

降低jdk方法:

并通过XFTP或上述的上传文件方法,上传至apache-tomcat-7069/webapps中

可以FTP方式

准备条件:java实现ftp上传用到了commons-net-33jar包

首先建立ftphost连接

public boolean connect(String path, String addr, int port, String username, String password) {

try {

//FTPClient ftp = new FTPHTTPClient(addr, port, username, password);

ftp = new FTPClient();

int reply;

ftpconnect(addr);

Systemoutprintln("连接到:" + addr + ":" + port);

Systemoutprint(ftpgetReplyString());

reply = ftpgetReplyCode();

if (!FTPReplyisPositiveCompletion(reply)) {

ftpdisconnect();

Systemerrprintln("FTP目标服务器积极拒绝");

Systemexit(1);

return false;

}else{

ftplogin(username, password);

ftpenterLocalPassiveMode();

ftpsetFileType(FTPClientBINARY_FILE_TYPE);

ftpchangeWorkingDirectory(path);

Systemoutprintln("已连接:" + addr + ":" + port);

return true;

}

} catch (Exception ex) {

exprintStackTrace();

Systemoutprintln(exgetMessage());

return false;

}

}

然后再利用ftpclient的makeDirectory方法创建文件夹

public void createDir(String dirname){

try{

ftpmakeDirectory(dirname);

Systemoutprintln("在目标服务器上成功建立了文件夹: " + dirname);

}catch(Exception ex){

Systemoutprintln(exgetMessage());

}

}

断开host连接

public void disconnect(){

try {

ftpdisconnect();

} catch (IOException e) {

eprintStackTrace();

}

}

最后是程序的调用方法

public static void main(String[] args) {

FtpUploadTest ftpupload = new FtpUploadTest();

if(ftpuploadconnect("", "172398x", 20, "administrator", "abc@123")){

ftpuploadcreateDir("/UPLOAD");

ftpuploaddisconnect();

}

}

看你具体是想做什么,现在现成的开源的java的http服务器有很多,像tomcat之类的都有http服务器功能,如果你只是单纯的需要用的话,直接用tomcat就好了

但是如果你是做要自己用java实现一个http服务器的话就要稍微麻烦一点

http服务器,本质上还是基于tcpip协议的服务器,首先用java的ServerSocket监听一个端口(也可以使用开源的server组件,如quickserver之类的),然后对客户端发上来的数据进行处理,这里就需要了解一下http协议了,因为上来的数据,都是按照http协议来组织的,你需要将请求数据解析后,将响应数据组织成http的响应,发回给客户端。这样一个简单的http服务器就实现了。

但是这个请求和响应都有很多种类,一个完整的http服务器应该要都能够支持,所以这里面的工作量还是有一点的。

另外,上面说的http服务器只是一个静态的服务器,如果你想让你写的服务具有动态功能,那你的服务器还得提供javaee的容器功能,这样做下去,没准你也能写一个tomcat出来了……

DABAN RP主题是一个优秀的主题,极致后台体验,无插件,集成会员系统
网站模板库 » 怎样通过java实现服务器上文件下载?

0条评论

发表评论

提供最优质的资源集合

立即查看 了解详情