文件从本地到服务器的功能,其实是为了解决目前浏览器不支持获取本地文件全路径。不得已而想到上传到服务器的固定目录,从而方便项目获取文件,进而使程序支持EXCEL批量导入数据。
java中文件上传到服务器的指定路径的代码:
在前台界面中输入:
<form method="post" enctype="multipart/form-data" action="/manage/excelImportdo">
请选文件:<input type="file" name="excelFile">
<input type="submit" value="导入" onclick="return impExcel();"/>
</form>
action中获取前台传来数据并保存
/
excel 导入文件
@return
@throws IOException
/
@RequestMapping("/usermanager/excelImportdo")
public String excelImport(
String filePath,
MultipartFile excelFile,>
loginfo("<<<<<<action:{} Method:{} start>>>>>>","usermanager","excelImport" );
if (excelFile != null){
String filename=excelFilegetOriginalFilename();
String a=requestgetRealPath("u/cms/>
SaveFileFromInputStream(excelFilegetInputStream(),requestgetRealPath("u/cms/>
}
loginfo("<<<<<<action:{} Method:{} end>>>>>>","usermanager","excelImport" );
return "";
}
/
将MultipartFile转化为file并保存到服务器上的某地
/
public void SaveFileFromInputStream(InputStream stream,String path,String savefile) throws IOException
{
FileOutputStream fs=new FileOutputStream( path + "/"+ savefile);
Systemoutprintln("------------"+path + "/"+ savefile);
byte[] buffer =new byte[10241024];
int bytesum = 0;
int byteread = 0;
while ((byteread=streamread(buffer))!=-1)
{
bytesum+=byteread;
fswrite(buffer,0,byteread);
fsflush();
}
fsclose();
streamclose();
}
可以直接通过流的形式上传或者下载。
import javaioFile;
import javaioFileInputStream;
import javaioFileOutputStream;
import javautilProperties;
import comjcraftjschChannel;
import comjcraftjschChannelSftp;
import comjcraftjschJSch;
import comjcraftjschSession;
import comjcraftjschSftpException;
import hkrtb2bviewutilLog;
import javautilVector;
import znccfccbutilCCFCCBUtil;
/
/
public class CCFCCBSftp {
/
连接sftp服务器
@return
/
public static ChannelSftp connect() {
ChannelSftp sftp = null;
try {
JSch jsch = new JSch();
jschgetSession(CCFCCBUtilCCFCCBHOSTNAME, CCFCCBUtilCCFCCBHOSTNAME, 22);
Session sshSession = jschgetSession(CCFCCBUtilCCFCCBLOGINNAME, CCFCCBUtilCCFCCBHOSTNAME, 22);
Systemoutprintln("Session created");
sshSessionsetPassword(CCFCCBUtilCCFCCBLOGINPASSWORD);
Properties sshConfig = new Properties();
sshConfigput("StrictHostKeyChecking", "no");
sshSessionsetConfig(sshConfig);
sshSessionconnect();
Systemoutprintln("Session connected");
Systemoutprintln("Opening Channel");
Channel channel = sshSessionopenChannel("sftp");
channelconnect();
sftp = (ChannelSftp) channel;
Systemoutprintln("Connected to " + CCFCCBUtilCCFCCBHOSTNAME + "");
} catch (Exception e) {
}
return sftp;
}
/
连接sftp服务器
@param host 主机
@param port 端口
@param username 用户名
@param password 密码
@return
/
public static ChannelSftp connect(String host, int port, String username,
String password) {
ChannelSftp sftp = null;
try {
JSch jsch = new JSch();
jschgetSession(CCFCCBUtilCCFCCBHOSTNAME, CCFCCBUtilCCFCCBHOSTNAME, 22);
Session sshSession = jschgetSession(CCFCCBUtilCCFCCBLOGINNAME, host, port);
Systemoutprintln("Session created");
sshSessionsetPassword(CCFCCBUtilCCFCCBLOGINPASSWORD);
Properties sshConfig = new Properties();
sshConfigput("StrictHostKeyChecking", "no");
sshSessionsetConfig(sshConfig);
sshSessionconnect();
Systemoutprintln("Session connected");
Systemoutprintln("Opening Channel");
Channel channel = sshSessionopenChannel("sftp");
channelconnect();
sftp = (ChannelSftp) channel;
Systemoutprintln("Connected to " + host + "");
} catch (Exception e) {
}
return sftp;
}
/
上传文件
@param directory 上传的目录
@param uploadFile 要上传的文件
@param sftp
/
public void upload(String directory, String uploadFile, ChannelSftp sftp) {
try {
sftpcd(directory);
File file = new File(uploadFile);
sftpput(new FileInputStream(file), filegetName());
} catch (Exception e) {
eprintStackTrace();
}
}
/
下载文件
@param directory 下载目录
@param downloadFile 下载的文件
@param saveFile 存在本地的路径
@param sftp
@return
/
public static String download(String directory, String downloadFile, String saveFile, ChannelSftp sftp) {
try {
sftpcd(directory);
File file = new File(saveFile);
FileOutputStream fos = new FileOutputStream(file);
sftpget(downloadFile, fos);
sftpdisconnect();
fosclose();
} catch (Exception e) {
Loginfo("下载文件过程出错:" + egetMessage());
return "false";
}
return "true";
}
/
删除文件
@param directory 要删除文件所在目录
@param deleteFile 要删除的文件
@param sftp
/
public void delete(String directory, String deleteFile, ChannelSftp sftp) {
try {
sftpcd(directory);
sftprm(deleteFile);
} catch (Exception e) {
}
}
/
列出目录下的文件
@param directory 要列出的目录
@param sftp
@return
@throws SftpException
/
public Vector listFiles(String directory, ChannelSftp sftp) throws SftpException {
return sftpls(directory);
}
public static void main(String[] args) {
CCFCCBSftp sf = new CCFCCBSftp();
String host = CCFCCBUtilCCFCCBHOSTNAME;
int port = 22;
String username = CCFCCBUtilCCFCCBLOGINNAME;
String password = CCFCCBUtilCCFCCBLOGINPASSWORD;
String directory = "/ccfccb/904999900099/download/";
//String uploadFile = "D:\\tmp\\uploadtxt";
String downloadFile = "CCF_904999900099_20150317_0001zip";
String saveFile = CCFCCBUtilCCFCCBUploadFilePath + "//" + "CCF_904999900099_20150317_0001zip";
//String deleteFile = "deletetxt";
ChannelSftp sftp = CCFCCBSftpconnect(host, port, username, password);
//sfupload(directory, uploadFile, sftp);
CCFCCBSftpdownload(directory, downloadFile, saveFile, sftp);
//sfdelete(directory, deleteFile, sftp);
try {
sftpcd(directory);
// sftpmkdir("ss");
Systemoutprintln("finished");
} catch (Exception e) {
}
}
}
我就是用sftp传输的,Android下,就是用手机录音,然后把录下来的音频文件保存到服务器里,给你源代码吧,
import javaioFile;import javaioFileInputStream;
import javaioFileOutputStream;
import javautilDate;
import javautilProperties;
import javautilVector;
import androidcontentContext;
import androidtelephonyTelephonyManager;
import androidtextformatDateFormat;
import androidtextformatTime;
import comjcraftjschChannel;
import comjcraftjschChannelSftp;
import comjcraftjschJSch;
import comjcraftjschSession;
import comjcraftjschSftpException;
public class Sftp_upload {
/
连接sftp服务器
@param host 主机
@param port 端口
@param username 用户名
@param password 密码
@return
/
public ChannelSftp connect(String host, int port, String username,String password) {
ChannelSftp sftp = null;
try {
JSch jsch = new JSch();
jschgetSession(username, host, port);
Session sshSession = jschgetSession(username, host, port);
Systemoutprintln("Session created");
sshSessionsetPassword(password);
Properties sshConfig = new Properties();
sshConfigput("StrictHostKeyChecking", "no");
sshSessionsetConfig(sshConfig);
sshSessionconnect();
Systemoutprintln("Session connected");
Systemoutprintln("Opening Channel");
Channel channel = sshSessionopenChannel("sftp");
channelconnect();
sftp = (ChannelSftp) channel;
Systemoutprintln("Connected to " + host + "");
//Systemoutprintln("登录成功");
} catch (Exception e) {
}
return sftp;
}
/
上传文件
@param directory 上传的目录
@param uploadFile 要上传的文件
@param sftp
/
public void upload(String directory, String uploadFile, ChannelSftp sftp) {
try {
sftpcd(directory);
File file=new File(uploadFile);
String currentTime=DateFormatformat("yyyy_MM_dd_hh_mm_ss", new Date())toString(); //获取时间
String filename=currentTime+"wav"; //文件名为当前时间来保存
sftpput(new FileInputStream(file), filename);
Systemoutprintln("上传成功!");
} catch (Exception e) {
eprintStackTrace();
}
}
/
下载文件
@param directory 下载目录
@param downloadFile 下载的文件
@param saveFile 存在本地的路径
@param sftp
/
public void download(String directory, String downloadFile,String saveFile, ChannelSftp sftp) {
try {
sftpcd(directory);
File file=new File(saveFile);
sftpget(downloadFile, new FileOutputStream(file));
} catch (Exception e) {
eprintStackTrace();
}
}
/
删除文件
@param directory 要删除文件所在目录
@param deleteFile 要删除的文件
@param sftp
/
public void delete(String directory, String deleteFile, ChannelSftp sftp) {
try {
sftpcd(directory);
sftprm(deleteFile);
} catch (Exception e) {
eprintStackTrace();
}
}
/
列出目录下的文件
@param directory 要列出的目录
@param sftp
@return
@throws SftpException
/
public Vector listFiles(String directory, ChannelSftp sftp) throws SftpException{
return sftpls(directory);
}
//上传文件
public static void Sftp_server(String file,String imsi) {
String Imsi = imsi;
Sftp_upload sf = new Sftp_upload();
String host = "192168160";
int port = 22;
String username = "root";
String password = "123456";
String directory = "/data/test/wav";
//String uploadFile = "c:\\audiocheck\\testwav";
String uploadFile = file;
// String downloadFile = "/data/test/wav/lamesh";
// String saveFile = "c:\\audiocheck\\contenttxt";
// String deleteFile = "c:\\audiocheck\\contenttxt";
ChannelSftp sftp=sfconnect(host, port, username, password);
//sfdownload(directory, downloadFile, saveFile, sftp);
//sfdelete(directory, deleteFile, sftp);
try{
sftpcd(directory);
sftpmkdir(Imsi); //创建目录
Systemoutprintln("finished");
}catch(Exception e){
eprintStackTrace();
}
directory = "/data/test/wav/"+imsi;
sfupload(directory, uploadFile, sftp);//上传文件到服务器
}
}
这个就是源代码,
然后上传的时候用的代码
//imsi也就是 手机的型号来创建文件夹的,这些你都可以修改的。String file = mWorkdir+"/"+"resFilewav"; //要上传的文件
Sftp_uploadSftp_server(file,imsi); //上传文件
Systemoutprintln("已上传");
纯Java通过SSH执行Linux命令的方法及代码
注:此ssh非彼SSH(Struts+Spring+Hibernate)
在Java中,我们可以通过Runtime去执行一些OS的命令,如:
String[] shell = new String[] { " /bin/sh " , " -c " , " ls -l " } ;
Process p = RuntimegetRuntime()exec(shell);
通过在Linux上执行 ssh --help命令,
usage: ssh [-1246AaCfgKkMNnqsTtVvXxY] [-b bind_address] [-c cipher_spec]
[-D [bind_address:]port] [-e escape_char] [-F configfile]
[-i identity_file] [-L [bind_address:]port:host:hostport]
[-l login_name] [-m mac_spec] [-O ctl_cmd] [-o option] [-p port]
[-R [bind_address:]port:host:hostport] [-S ctl_path]
[-w local_tun[:remote_tun]] [user@]hostname [command]
不难发现,ssh命令中并不能带密码。
如果不需要登录时,我们可以用这样的方式来执行:
String[] shell = new String[] { " /bin/sh " , " -c " , " ssh root@19216815 ls -l " } ;
Process p = RuntimegetRuntime()exec(shell);
但是事情往往并不是我们想象的如此简单,绝大部分的客户是不能允许他们的Linux中还存在一个不需要密码就能执行任何命令的帐户的。那么,在Java中就没有任何办法通过ssh登录来执行一些命令吗?
不慌,先来Google一下,从一些网上别人请教的代码的蛛丝蚂迹中,发现了JSch ( >
ChannelSftp类是JSch实现SFTP核心类,它包含了所有SFTP的方法,如:
put(): 文件上传
get(): 文件下载
cd(): 进入指定目录
ls(): 得到指定目录下的文件列表
rename(): 重命名指定文件或目录
rm(): 删除指定文件
mkdir(): 创建目录
rmdir(): 删除目录
等等(这里省略了方法的参数,put和get都有多个重载方法,具体请看源代码,这里不一一列出。)
String directory = "";
目测 /home/>
以上就是关于java中怎么把文件上传到服务器的指定路径全部的内容,包括:java中怎么把文件上传到服务器的指定路径、java 服务器与客户端的文件传输、你好!我也碰到了SFTP传输,纯java可以,Android就不行,纠结好几天了,希望你能尽快帮我解答,谢谢!等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)