Java 通过SFTP上传图片功能
1、需要在pom.xml文件中引用jsch的依赖:
- <dependency>
- <groupId>com.jcraft</groupId>
- <artifactId>jsch</artifactId>
- <version>0.1.54</version>
- </dependency>
2、ajax异步提交请求:
- var uploadImage = function () {
- var file = document.getElementById("file").files[0];
- var formData = new FormData();
- formData.append('file', file);
- $.ajax({
- type: "post",
- dataType: "json",
- data: formData,
- url: "catalog/uploadImage",
- contentType: false,
- processData: false,
- mimeType: "multipart/form-data",
- success: function (data) {
- if (data.code > 0) {
- alert("操作成功");
- } else {
- alert(data.message);
- }
- },
- error: function () {
- alert("出错了,请联系管理员!");
- }
- });
- }
3、后端接收请求方法:
- @ResponseBody
- @RequestMapping("/uploadImage")
- public Object uploadImage(@RequestParam("file") MultipartFile file, HttpServletRequest request) throws IOException {
- HotelImageVo imageVo = new HotelImageVo();
- if (file == null) {
- imageVo.setCode(0);
- imageVo.setMessage("请先选择图片!");
- return JSON.toJSONString(imageVo);
- }
- double fileSize = file.getSize();
- System.out.println("文件的大小是" + fileSize);
- //拓展的目录,hotelId不为空则使用hotelId作为目录的一部分
- String extendDir = "ranklist/";
- String fileName = file.getOriginalFilename();// 文件原名称
- // 判断文件类型
- String type = fileName.indexOf(".") != -1 ? fileName.substring(fileName.lastIndexOf(".") + 1, fileName.length()) : null;
- if (type != null) {// 判断文件类型是否为空
- if ("JPEG".equals(type.toUpperCase()) || "PNG".equals(type.toUpperCase()) || "JPG".equals(type.toUpperCase())) {
- // 项目在容器中实际发布运行的根路径
- String realPath = request.getSession().getServletContext().getRealPath("/");
- String dirPath = "/upload/" + extendDir;
- // 自定义的文件名称
- fileName = UUID.randomUUID().toString() + "." + type;
- String localPath = realPath + dirPath + fileName;
- File newFile = new File(localPath);
- if (!newFile.getParentFile().exists()) {
- newFile.getParentFile().mkdirs();
- }
- //保存本地文件
- file.transferTo(newFile);
- //上传远程文件
- SFTPUtils sftp = new SFTPUtils();
- sftp.upload(localPath, extendDir, fileName);
- //删除本地文件
- newFile.delete();
- } else {
- imageVo.setCode(0);
- imageVo.setMessage("图片格式必须是png、jpg或jpeg!");
- return JSON.toJSONString(imageVo);
- }
- } else {
- imageVo.setCode(0);
- imageVo.setMessage("文件类型为空!");
- return JSON.toJSONString(imageVo);
- }
- imageVo.setCode(1);
- String newFilePath = ServerConfig.newUrl + extendDir + fileName;
- imageVo.setMessage(newFilePath);
- return JSON.toJSONString(imageVo);
- }
4、通过SFTP把图片上传服务器使用的工具类:
- public class SFTPUtils {
- private ChannelSftp sftp;
- private Session session;
- private String sftpPath;
- public SFTPUtils() {
- this.connectServer("服务器IP", 22, "用户名", "密码", "需要保存文件的文件夹路径");
- }
- public SFTPUtils(String ftpHost, int ftpPort, String ftpUserName, String ftpPassword, String sftpPath) {
- this.connectServer(ftpHost, ftpPort, ftpUserName, ftpPassword, sftpPath);
- }
- private void connectServer(String ftpHost, int ftpPort, String ftpUserName, String ftpPassword, String sftpPath) {
- try {
- this.sftpPath = sftpPath;
- // 创建JSch对象
- JSch jsch = new JSch();
- // 根据用户名,主机ip,端口获取一个Session对象
- session = jsch.getSession(ftpUserName, ftpHost, ftpPort);
- if (ftpPassword != null) {
- // 设置密码
- session.setPassword(ftpPassword);
- }
- Properties configTemp = new Properties();
- configTemp.put("StrictHostKeyChecking", "no");
- // 为Session对象设置properties
- session.setConfig(configTemp);
- // 设置timeout时间
- session.setTimeout(60000);
- session.connect();
- // 通过Session建立链接
- // 打开SFTP通道
- sftp = (ChannelSftp) session.openChannel("sftp");
- // 建立SFTP通道的连接
- sftp.connect();
- } catch (JSchException e) {
- e.printStackTrace();
- }
- }
- /**
- * 断开SFTP Channel、Session连接
- */
- public void closeChannel() {
- try {
- if (sftp != null) {
- sftp.disconnect();
- }
- if (session != null) {
- session.disconnect();
- }
- } catch (Exception e) {
- e.printStackTrace();
- }
- }
- /**
- * 上传文件
- *
- * @param localFile 本地文件
- * @param remotePath 远程文件
- * @param fileName 文件名称
- */
- public void upload(String localFile, String remotePath, String fileName) {
- try {
- if (remotePath != null && !"".equals(remotePath)) {
- remotePath = sftpPath + remotePath;
- createDir(remotePath);
- sftp.put(localFile, (remotePath + fileName), ChannelSftp.OVERWRITE);
- sftp.quit();
- }
- } catch (SftpException e) {
- e.printStackTrace();
- }
- }
- /**
- * 下载文件
- *
- * @param remotePath 远程文件
- * @param fileName 文件名称
- * @param localFile 本地文件
- */
- public void download(String remotePath, String fileName, String localFile) {
- try {
- remotePath = sftpPath + remotePath;
- if (remotePath != null && !"".equals(remotePath)) {
- sftp.cd(remotePath);
- }
- sftp.get((remotePath + fileName), localFile);
- sftp.quit();
- } catch (SftpException e) {
- e.printStackTrace();
- }
- }
- /**
- * 删除文件
- *
- * @param remotePath 要删除文件所在目录
- */
- public void delete(String remotePath) {
- try {
- if (remotePath != null && !"".equals(remotePath)) {
- remotePath = sftpPath + remotePath;
- sftp.rm(remotePath);
- }
- } catch (Exception e) {
- e.printStackTrace();
- }
- }
- /**
- * 创建一个文件目录
- */
- public void createDir(String createpath) {
- try {
- if (isDirExist(createpath)) {
- this.sftp.cd(createpath);
- return;
- }
- String pathArry[] = createpath.split("/");
- StringBuffer filePath = new StringBuffer("/");
- for (String path : pathArry) {
- if (path.equals("")) {
- continue;
- }
- filePath.append(path + "/");
- if (isDirExist(filePath.toString())) {
- sftp.cd(filePath.toString());
- } else {
- // 建立目录
- sftp.mkdir(filePath.toString());
- // 进入并设置为当前目录
- sftp.cd(filePath.toString());
- }
- }
- this.sftp.cd(createpath);
- } catch (SftpException e) {
- throw new SystemException("创建路径错误:" + createpath);
- }
- }
- /**
- * 判断目录是否存在
- */
- public boolean isDirExist(String directory) {
- boolean isDirExistFlag = false;
- try {
- SftpATTRS sftpATTRS = sftp.lstat(directory);
- isDirExistFlag = true;
- return sftpATTRS.isDir();
- } catch (Exception e) {
- if (e.getMessage().toLowerCase().equals("no such file")) {
- isDirExistFlag = false;
- }
- }
- return isDirExistFlag;
- }
- }
Java 通过SFTP上传图片功能的更多相关文章
- JAVA 上传图片功能
前后端实现上传图片功能(JAVA代码) 1.前端大概 请求头必须为AJAX请求头: 'X-Requested-With': 'XMLHttpRequest' 一般是指网页中存在的Content-Typ ...
- 配置Django-TinyMCE组件支持上传图片功能
Django自带的Admin后台,好用,TinyMCE作为富文本编辑器,也蛮好用的,这两者结合起来在做博客的时候很方便(当然博客可能更适合用Markdown来写),但是Django-TinyMCE这个 ...
- MVC ueditor的使用(实现上传图片功能)
之前使用ckeditor不能实现上传图片功能,只要是我不知道怎么使用啦o( ̄ε ̄*),然后就换了ueditor~~,可以实现上传图片功能啦~\(≧▽≦)/~~ 下面是我的步骤:去官网下载最新版uedi ...
- aspx页面中用Input 标签实现上传图片功能
实现上传图片功能需单独的建立一个aspx页面, 其中前台页面需要注意两点: a)实现上传功能的input的type="file" b)设置请求报文头为 enctype=" ...
- [转]JAVA实现SFTP实例
http://www.cnblogs.com/chen1987lei/archive/2010/11/26/1888384.html 最近写的一个JAVA实现SFTP的实例: /** Created ...
- Java使用SFTP和FTP两种连接方式实现对服务器的上传下载 【我改】
[]如何区分是需要使用SFTP还是FTP? []我觉得: 1.看是否已知私钥. SFTP 和 FTP 最主要的区别就是 SFTP 有私钥,也就是在创建连接对象时,SFTP 除了用户名和密码外还需要知道 ...
- JAVA实现SFTP实例
最近写的一个JAVA实现SFTP的实例: /* * Created on 2009-9-14 * Copyright 2009 by www.xfok.net. All Rights Reserved ...
- Java 基本数据类型 sizeof 功能
Java 基本数据类型 sizeof 功能 来源 https://blog.csdn.net/ithomer/article/details/7310008 Java基本数据类型int 32b ...
- WCF实现上传图片功能
初次学习实现WCF winform程序的通信,主要功能是实现图片的传输. 下面是实现步骤: 第一步: 首先建立一个类库项目TransferPicLib,导入wcf需要的引用System.Service ...
随机推荐
- css的尺寸、display的属性、以及浮动和清除浮动的方法
css的尺寸width heightline-height 行高是由三部分构成,上间距 文本高度 下间距,且上下间距相等.所以文字居中.行高:一旦设置了行高,元素内部必须有内容.line-height ...
- 要什么 Photoshop,会这些 CSS 就够了
标题党一时爽,一直标题党一直爽 还在上大学那会儿,我就喜欢玩 Photoshop.后来写网页的时候,由于自己太菜,好多花里胡哨的效果都得借助 Photoshop 实现,当时就特别希望 CSS 能像 P ...
- bugku——普通的二维码(进制转换)
题目地址:http://ctf.bugku.com/files/5e480ecb178711e82bc847a208e15b32/misc80.zip 就一张二维码图片,用一些在线工具识别是乱码,用Q ...
- Direct Access to Video Encoding and Decoding
来源:http://asciiwwdc.com/2014/sessions/513 Direct Access to Video Encoding and Decoding Session 5 ...
- JVM参数最佳实践:元空间的初始大小和最大大小
本文阅读时间大约4分钟. JVM加载类的时候,需要记录类的元数据,这些数据会保存在一个单独的内存区域内,在Java 7里,这个空间被称为永久代(Permgen),在Java 8里,使用元空间(Meta ...
- 找出所有文件最小可resize尺寸
--找出所有文件最小可resize尺寸 SELECT a.file_id, CEIL( ( NVL( hwm,1 ) * blksize ) / 1024 / 1024 ) smallest_M, C ...
- Bean的一生(Bean的生命周期)
1. 什么是Bean? Bean是spring中组成应用程序的主体及由spring IoC容器所管理的对象(IoC容器初始化.装配及管理的对象).如果把spring比作一座大型工厂,那么bean就是该 ...
- PAT 乙级 1032.挖掘机技术哪家强 C++/Java
题目来源 为了用事实说明挖掘机技术到底哪家强,PAT 组织了一场挖掘机技能大赛.现请你根据比赛结果统计出技术最强的那个学校. 输入格式: 输入在第 1 行给出不超过 1 的正整数 N,即参赛人数.随后 ...
- 查看mysql连接数和状态
查看MySQL连接数 登录到MySQL命令行,使用如下命令可以查看当前处于连接未关闭状态的进程列表: show full processlist; 若不加上full选项,则最多显示100条记录. 若以 ...
- python 数据库小测试
1.整理博客 2.详细解释下列mysql执行语句的每个参数与参数值的含义 mysql -hlocalhost -P3306 -uroot -proot # mysql (连接数据库) # hloc ...