SSH2中、从本地上传文件是怎么实现的?

SSH2中、从本地上传文件是怎么实现的?,第1张

<s:form action="****" namespace="/***" enctype="multipart/form-data" theme="simple">

<input type="file" id="fi" name="myFile" style="height: 30"/>

<input type="submit" value="提交"/>

</s:form>

ACTION中:

// myFile属性用来封装上传的文件

private File myFile

// myFileContentType属性用来封装上传文件的类型

private String myFileContentType

// myFileFileName属性用来封装上传文件的文件名

private String myFileFileName

方法中:

//设置上传文件目录

String filePath=ServletActionContext.getServletContext().getRealPath("/****")

//基于myFile创建文件输入流

InputStream is=new FileInputStream(myFile)

String a[] = myFileFileName.split("\\.")

System.out.println("上传文件名:"+a[0]+"上传文件类型:"+a[1])

//设置目标文件

File toFile=new File(filePath,“可以自己取"+"."+a[1])

//创建一个输出流

OutputStream os=new FileOutputStream(toFile)

// OutputStream bos = new FileOutputStream(filePath)//建立一个上传文件的输出流

int bytesRead = 0

byte[] buffer = new byte[8192]

while ( (bytesRead = is.read(buffer, 0, 8192)) != -1) {

os.write(buffer, 0, bytesRead)//将文件写入服务器

}

问题发生的具体情况能不能具体阐述下?

根据我的经验,对于某些浏览器,如果想开始一个下载需要独立d出一个新的窗口 <a target=_blank>或 <form target="_blank">

其次请确认以下几点:

1.该文件是否有读权限

2.是否在header之前有任何的输出,按F12使用调试工具抓包(主流浏览器都有这个功能了ie9,firefox需要firebug,chrome)

SSH2

现在开始说明如何在 UNIX 下使用 SSH 连线。此教材谈的是欧洲 SSH Communications Security 公司出版的 SSH2 软体套件,而非 OpenSSH。SSH2 虽然是一个商业组织生产的软体,但仍是开放性的软体。 SSH2 和 OpenSSH 理论上符合一样的协定规格,但是两个不同的程式,请读者留意。

以下,我们用 SSH 代表 SSH2。

首先,请先确定你所使用的主机和要连线的主机都有安装 SSH 2.4.0 以上的版本,如果任何一端没有安装,那麼当然无法使用 SSH 连线。

在本地端 (Local):

下指令

ssh -v

如果你目前使用的主机有安装 SSH,视窗会出现以下的回应:

ssh: SSH Secure Shell x.x.x (non-commercial version) on sparc-sun-solaris2.6

其中 x.x.x 就是 SSH 的版本, 2.4.0 以下的版本虽然可以连线,但可能会有安全上的漏洞。

要是视窗出现类似下面的回应:

OpenSSH_3.4p1 FreeBSD-20020702, SSH protocols 1.5/2.0, OpenSSL 0x0090601f

那表示你目前使用的主机用的是 Opne SSH,那只好请你自己去看说明文件[输入 man ssh ]。

如果视窗出现下面的回应:

ssh: Command not found.

表示这台主机根本没有安装 SSH 或 OpenSSH。

远方主机 (Remote):

下指令

telnet HostName 22

在这里 HostName 指的是远方主机的位址。

如果出现类似下面的回应:

Trying 140.115.25.6...

Connected to 140.115.25.6.

Escape character is '^]'.

SSH-2.0-x.x.x SSH Secure Shell (non-commercial)

表示远方主机安装了 SSH x.x.x 版。

要跳回去,请按 Ctrl+],当提示符号变成 telnet>时下指令 quit 就可以了。

要是出现下面的回应:

Trying 140.115.25.4...

Connected to 140.115.25.4.

Escape character is '^]'.

SSH-1.99-OpenSSH_3.4p1 FreeBSD-20020702

请注意最后一行,这表示远方主机所安装的是 OpenSSH,你恐怕无法用 SSH 和 OpenSSH 互相沟通。跳回去的方法和 SSH 的一样,所以就不重复了。

要是出现下面的回应:

Trying 140.115.26.32...

telnet: Unable to connect to remote host: Connection refused

表示远方主机既没有安装 SSH,也没有安装 OpenSSH。

如果确认没问题,那我们就一步一步来:(以下的说明,请特别注意大小写)

一、制作公钥和私钥

请下指令

ssh-keygen2 name

在此 name 是由使用者自行选择的钥匙名字。输入后,视窗会出现以下回应:

Generating 1024-bit dsa key pair

请等待一段时间,此时程式正在制作钥匙,钥匙完成后会出现下面的讯息:

Key generated.

1024-bit dsa, liyl@wangwei, Wed Jul 17 2002 06:57:08

Passphrase :

程式会要求使用者输入通行码以避免私钥被人盗用。当你输入通行码后,视窗会出现以下回应:

Again :

要求你再输入一次通行码以确认你刚刚并没有打错。最后会出现下面的讯息:

Private key saved to name

Public key saved to name.pub

这段讯息表示程式把私钥用 name 作档名储存起来,把公钥用 name.pub 作为档名储存起来。

二、使用钥匙

钥匙做好以后,放在你自己的目录下的 .ssh2/ 下,然后你要写一个档案,命名为 identification,放在 .ssh2/ 下,把下面这行文字加进去:

IdKey name

name 是你的放私钥的档案的名字。这麼一来钥匙便算是开始启用了。

三、交换公钥

钥匙完成以后,就必须上传到远方主机中自己的目录下的 .ssh2/ 资料夹中,另一方面,你也必须把远方主机的公钥放到自己这边的 .ssh2/ 下。下指令

sftp UserName@HostName

这里 HostName 是远方主机的位址, UserName 则是你自己的帐号。

如果你是第一次用 SSH 的程式登入这一台主机,那麼主机会问你要不要把属於这台主机的钥匙[ HostKey ]记下来,请视情况回答 yes 或 no [回答 y 或 n 是没用的],大部分情况应该都是回答 yes 的。

接著应该会要求你输入帐号的通行码,登入之后, *** 作方式和 ftp 一样,请照之前的说明交换公钥,然后登出回到原来工作的主机。

接著要再编辑另一个档案 authorization,放在 .ssh2/ 下,加入这一行文字:

Key PublicKey.pub

PublicKey.pub 是你从其他地方抓下来的公钥的档名。如此一来,你这边的准备工作就算完成了。以后如果你从其他地方抓了新的公钥,只要再加上同样的文字就可以了。像这样:

Key abc.pub

Key def.pub

Key jklljl.pub

这样表示你从三个不同的远方主机抓到了三个公钥:abc、def、jklljl, SSH 会自行判断什麼时候要用哪支公钥。

四、登入

要使用 ssh 登入,下指令

ssh -l UserName HostName

其中 HostName 是远方主机的位址, UserName 是你的帐号。

如果远方主机中的 .ssh2/authorization 还没有修该的话,程式应该会向你要通行码,此时你的通行码是在加密状态。登入后,同样编辑 authorization,加入

Key PublicKey.pub

这里的 PublicKey.pub 则是你上传到这台主机的公钥的档名。

再来先登出,再用 SSH 登入,如果看到类似下面的讯息:

Passphrase for key "/home/math88/liyl/.ssh2/bgs" with comment "1024-bit dsa, li:

这就代表程式要求你输入私钥的通行码[当然,如果你没有设定通行码,那你就直接登入,不用任何通行码],输入以后,程式就登入远方主机,此时所有在网路上互传的讯息都是加密的。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/tougao/7938941.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-11
下一篇 2023-04-11

发表评论

登录后才能评论

评论列表(0条)

保存