文件从本地到服务器的功能,其实是为了解决目前浏览器不支持获取本地文件全路径。不得已而想到上传到服务器的固定目录,从而方便项目获取文件,进而使程序支持EXCEL批量导入数据。
java中文件上传到服务器的指定路径的代码:
在前台界面中输入:
<form method="post" enctype="multipart/form-data" action="../manage/excelImport.do">
请选文件:<input type="file" name="excelFile">
<input type="submit" value="导入" onclick="return impExcel()"/>
</form>
action中获取前台传来数据并保存
/**
* excel 导入文件
* @return
* @throws IOException
*/
@RequestMapping("/usermanager/excelImport.do")
public String excelImport(
String filePath,
MultipartFile excelFile,HttpServletRequest request) throws IOException{
log.info("<<<<<<action:{} Method:{} start>>>>>>","usermanager","excelImport" )
if (excelFile != null){
String filename=excelFile.getOriginalFilename()
String a=request.getRealPath("u/cms/www/201509")
SaveFileFromInputStream(excelFile.getInputStream(),request.getRealPath("u/cms/www/201509"),filename)//保存到服务器的路径
}
log.info("<<<<<<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)
System.out.println("------------"+path + "/"+ savefile)
byte[] buffer =new byte[1024*1024]
int bytesum = 0
int byteread = 0
while ((byteread=stream.read(buffer))!=-1)
{
bytesum+=byteread
fs.write(buffer,0,byteread)
fs.flush()
}
fs.close()
stream.close()
}
String realpath = ServletActionContext.getServletContext().getRealPath("/upload") //获取服务器路径String[] targetFileName = uploadFileName
for (int i = 0i <upload.lengthi++) {
File target = new File(realpath, targetFileName[i])
FileUtils.copyFile(upload[i], target)
//这是一个文件复制类copyFile()里面就是IO *** 作,如果你不用这个类也可以自己写一个IO复制文件的类
}
其中private File[] upload// 实际上传文件
private String[] uploadContentType// 文件的内容类型
private String[] uploadFileName// 上传文件名
这三个参数必须这样命名,因为文件上传控件默认是封装了这3个参数的,且在action里面他们应有get,set方法
可以直接通过流的形式上传或者下载。import java.io.File
import java.io.FileInputStream
import java.io.FileOutputStream
import java.util.Properties
import com.jcraft.jsch.Channel
import com.jcraft.jsch.ChannelSftp
import com.jcraft.jsch.JSch
import com.jcraft.jsch.Session
import com.jcraft.jsch.SftpException
import hkrt.b2b.view.util.Log
import java.util.Vector
import zn.ccfccb.util.CCFCCBUtil
/**
*/
public class CCFCCBSftp {
/**
* 连接sftp服务器
*
* @return
*/
public static ChannelSftp connect() {
ChannelSftp sftp = null
try {
JSch jsch = new JSch()
jsch.getSession(CCFCCBUtil.CCFCCBHOSTNAME, CCFCCBUtil.CCFCCBHOSTNAME, 22)
Session sshSession = jsch.getSession(CCFCCBUtil.CCFCCBLOGINNAME, CCFCCBUtil.CCFCCBHOSTNAME, 22)
System.out.println("Session created.")
sshSession.setPassword(CCFCCBUtil.CCFCCBLOGINPASSWORD)
Properties sshConfig = new Properties()
sshConfig.put("StrictHostKeyChecking", "no")
sshSession.setConfig(sshConfig)
sshSession.connect()
System.out.println("Session connected.")
System.out.println("Opening Channel.")
Channel channel = sshSession.openChannel("sftp")
channel.connect()
sftp = (ChannelSftp) channel
System.out.println("Connected to " + CCFCCBUtil.CCFCCBHOSTNAME + ".")
} 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()
jsch.getSession(CCFCCBUtil.CCFCCBHOSTNAME, CCFCCBUtil.CCFCCBHOSTNAME, 22)
Session sshSession = jsch.getSession(CCFCCBUtil.CCFCCBLOGINNAME, host, port)
System.out.println("Session created.")
sshSession.setPassword(CCFCCBUtil.CCFCCBLOGINPASSWORD)
Properties sshConfig = new Properties()
sshConfig.put("StrictHostKeyChecking", "no")
sshSession.setConfig(sshConfig)
sshSession.connect()
System.out.println("Session connected.")
System.out.println("Opening Channel.")
Channel channel = sshSession.openChannel("sftp")
channel.connect()
sftp = (ChannelSftp) channel
System.out.println("Connected to " + host + ".")
} catch (Exception e) {
}
return sftp
}
/**
* 上传文件
*
* @param directory 上传的目录
* @param uploadFile 要上传的文件
* @param sftp
*/
public void upload(String directory, String uploadFile, ChannelSftp sftp) {
try {
sftp.cd(directory)
File file = new File(uploadFile)
sftp.put(new FileInputStream(file), file.getName())
} catch (Exception e) {
e.printStackTrace()
}
}
/**
* 下载文件
*
* @param directory 下载目录
* @param downloadFile 下载的文件
* @param saveFile 存在本地的路径
* @param sftp
* @return
*/
public static String download(String directory, String downloadFile, String saveFile, ChannelSftp sftp) {
try {
sftp.cd(directory)
File file = new File(saveFile)
FileOutputStream fos = new FileOutputStream(file)
sftp.get(downloadFile, fos)
sftp.disconnect()
fos.close()
} catch (Exception e) {
Log.info("下载文件过程出错:" + e.getMessage())
return "false"
}
return "true"
}
/**
* 删除文件
*
* @param directory 要删除文件所在目录
* @param deleteFile 要删除的文件
* @param sftp
*/
public void delete(String directory, String deleteFile, ChannelSftp sftp) {
try {
sftp.cd(directory)
sftp.rm(deleteFile)
} catch (Exception e) {
}
}
/**
* 列出目录下的文件
*
* @param directory 要列出的目录
* @param sftp
* @return
* @throws SftpException
*/
public Vector listFiles(String directory, ChannelSftp sftp) throws SftpException {
return sftp.ls(directory)
}
public static void main(String[] args) {
CCFCCBSftp sf = new CCFCCBSftp()
String host = CCFCCBUtil.CCFCCBHOSTNAME
int port = 22
String username = CCFCCBUtil.CCFCCBLOGINNAME
String password = CCFCCBUtil.CCFCCBLOGINPASSWORD
String directory = "/ccfccb/904999900099/download/"
//String uploadFile = "D:\\tmp\\upload.txt"
String downloadFile = "CCF_904999900099_20150317_0001.zip"
String saveFile = CCFCCBUtil.CCFCCBUploadFilePath + "//" + "CCF_904999900099_20150317_0001.zip"
//String deleteFile = "delete.txt"
ChannelSftp sftp = CCFCCBSftp.connect(host, port, username, password)
//sf.upload(directory, uploadFile, sftp)
CCFCCBSftp.download(directory, downloadFile, saveFile, sftp)
//sf.delete(directory, deleteFile, sftp)
try {
sftp.cd(directory)
//sftp.mkdir("ss")
System.out.println("finished")
} catch (Exception e) {
}
}
}
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)