257 lines
11 KiB
Java
257 lines
11 KiB
Java
package com.zcloud.util;
|
||
|
||
import com.aliyun.oss.ClientException;
|
||
import com.aliyun.oss.OSS;
|
||
import com.aliyun.oss.OSSClientBuilder;
|
||
import com.aliyun.oss.OSSException;
|
||
import com.jcraft.jsch.*;
|
||
|
||
import java.io.File;
|
||
import java.io.FileInputStream;
|
||
import java.io.OutputStream;
|
||
import java.util.Date;
|
||
import java.util.List;
|
||
import java.util.Vector;
|
||
|
||
import com.zcloud.entity.PageData;
|
||
import com.zcloud.service.system.FileUploadLogService;
|
||
import org.apache.commons.lang.StringUtils;
|
||
import org.omg.CORBA.SystemException;
|
||
import org.springframework.beans.factory.annotation.Autowired;
|
||
import org.springframework.beans.factory.annotation.Value;
|
||
import org.springframework.stereotype.Component;
|
||
import org.springframework.web.multipart.MultipartFile;
|
||
|
||
import javax.annotation.Resource;
|
||
|
||
@Component
|
||
public class Smb {
|
||
@Resource
|
||
private FileUploadLogService fileUploadLogService;
|
||
|
||
private static String endpoint = "https://oss-cn-zhangjiakou.aliyuncs.com";
|
||
// 阿里云账号AccessKey拥有所有API的访问权限,风险很高。强烈建议您创建并使用RAM用户进行API访问或日常运维,请登录RAM控制台创建RAM用户。
|
||
private static String accessKeyId = "LTAI5tL5QVQ3E6wySAuvbLbo";
|
||
private static String accessKeySecret = "BaaiuHEeAaYOquqmWcAN5Mf5giWaAC";
|
||
// 填写Bucket名称。
|
||
private static String bucketName = "qyag";
|
||
|
||
public static void sshSftp(MultipartFile file, String fileName, String path) throws Exception {
|
||
|
||
String objectName = "YTHFile" + path + "/" + fileName;
|
||
// 填写本地文件的完整路径。如果未指定本地路径,则默认从示例程序所属项目对应本地路径中上传文件。
|
||
// 创建OSSClient实例。
|
||
OSS ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret);
|
||
|
||
try {
|
||
|
||
// 创建PutObject请求。
|
||
ossClient.putObject(bucketName, objectName, file.getInputStream());
|
||
// 创建PutObjectRequest对象。
|
||
// 如果需要上传时设置存储类型和访问权限,请参考以下示例代码。
|
||
// ObjectMetadata metadata = new ObjectMetadata();
|
||
// metadata.setHeader(OSSHeaders.OSS_STORAGE_CLASS, StorageClass.Standard.toString());
|
||
// metadata.setObjectAcl(CannedAccessControlList.Private);
|
||
// putObjectRequest.setMetadata(metadata);
|
||
|
||
// 上传文件。
|
||
} catch (OSSException oe) {
|
||
System.out.println("Caught an OSSException, which means your request made it to OSS, "
|
||
+ "but was rejected with an error response for some reason.");
|
||
System.out.println("Error Message:" + oe.getErrorMessage());
|
||
System.out.println("Error Code:" + oe.getErrorCode());
|
||
System.out.println("Request ID:" + oe.getRequestId());
|
||
System.out.println("Host ID:" + oe.getHostId());
|
||
} catch (Exception ce) {
|
||
System.out.println("Caught an ClientException, which means the client encountered "
|
||
+ "a serious internal problem while trying to communicate with OSS, "
|
||
+ "such as not being able to access the network.");
|
||
System.out.println("Error Message:" + ce.getMessage());
|
||
} finally {
|
||
if (ossClient != null) {
|
||
ossClient.shutdown();
|
||
}
|
||
}
|
||
}
|
||
|
||
public void sshSftp(MultipartFile file, String fileName, String path, String corpId) throws Exception {
|
||
|
||
String objectName = "YTHFile" + path + "/" + fileName;
|
||
// 填写本地文件的完整路径。如果未指定本地路径,则默认从示例程序所属项目对应本地路径中上传文件。
|
||
// 创建OSSClient实例。
|
||
OSS ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret);
|
||
|
||
try {
|
||
|
||
// 创建PutObject请求。
|
||
ossClient.putObject(bucketName, objectName, file.getInputStream());
|
||
// 创建PutObjectRequest对象。
|
||
// 如果需要上传时设置存储类型和访问权限,请参考以下示例代码。
|
||
// ObjectMetadata metadata = new ObjectMetadata();
|
||
// metadata.setHeader(OSSHeaders.OSS_STORAGE_CLASS, StorageClass.Standard.toString());
|
||
// metadata.setObjectAcl(CannedAccessControlList.Private);
|
||
// putObjectRequest.setMetadata(metadata);
|
||
|
||
// 上传文件。
|
||
|
||
long fileSize = file.getSize();//单位:字节
|
||
PageData pd = new PageData();
|
||
pd.put("FILEUPLOADLOG_ID", UuidUtil.get32UUID());
|
||
pd.put("CORPINFO_ID", corpId);
|
||
pd.put("CREATTIME", DateUtil.date2Str(new Date()));
|
||
pd.put("FILE_PATH", path + "/" + fileName);
|
||
pd.put("FILE_SIZE", fileSize);
|
||
fileUploadLogService.save(pd);
|
||
} catch (OSSException oe) {
|
||
System.out.println("Caught an OSSException, which means your request made it to OSS, "
|
||
+ "but was rejected with an error response for some reason.");
|
||
System.out.println("Error Message:" + oe.getErrorMessage());
|
||
System.out.println("Error Code:" + oe.getErrorCode());
|
||
System.out.println("Request ID:" + oe.getRequestId());
|
||
System.out.println("Host ID:" + oe.getHostId());
|
||
} catch (Exception ce) {
|
||
System.out.println("Caught an ClientException, which means the client encountered "
|
||
+ "a serious internal problem while trying to communicate with OSS, "
|
||
+ "such as not being able to access the network.");
|
||
System.out.println("Error Message:" + ce.getMessage());
|
||
} finally {
|
||
if (ossClient != null) {
|
||
ossClient.shutdown();
|
||
}
|
||
}
|
||
}
|
||
|
||
/**
|
||
* 删除文件
|
||
*
|
||
* @throws SftpException
|
||
* @throws JSchException
|
||
*/
|
||
public static void delete(String directoryFile) throws Exception {
|
||
|
||
OSS ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret);
|
||
|
||
try {
|
||
// 删除文件或目录。如果要删除目录,目录必须为空。
|
||
ossClient.deleteObject(bucketName, "YTHFile" + directoryFile);
|
||
} catch (OSSException oe) {
|
||
System.out.println("Caught an OSSException, which means your request made it to OSS, "
|
||
+ "but was rejected with an error response for some reason.");
|
||
System.out.println("Error Message:" + oe.getErrorMessage());
|
||
System.out.println("Error Code:" + oe.getErrorCode());
|
||
System.out.println("Request ID:" + oe.getRequestId());
|
||
System.out.println("Host ID:" + oe.getHostId());
|
||
} catch (Exception ce) {
|
||
System.out.println("Caught an ClientException, which means the client encountered "
|
||
+ "a serious internal problem while trying to communicate with OSS, "
|
||
+ "such as not being able to access the network.");
|
||
System.out.println("Error Message:" + ce.getMessage());
|
||
} finally {
|
||
if (ossClient != null) {
|
||
ossClient.shutdown();
|
||
}
|
||
}
|
||
|
||
}
|
||
|
||
public static void createDir(String createpath, ChannelSftp sftp) {
|
||
try {
|
||
if (isDirExist(createpath, sftp)) {
|
||
sftp.cd(createpath);
|
||
}
|
||
String pathArry[] = createpath.split("/");
|
||
StringBuffer filePath = new StringBuffer("/");
|
||
for (String path : pathArry) {
|
||
if (path.equals("")) {
|
||
continue;
|
||
}
|
||
filePath.append(path + "/");
|
||
if (isDirExist(filePath.toString(), sftp)) {
|
||
sftp.cd(filePath.toString());
|
||
} else {
|
||
// 建立目录
|
||
sftp.mkdir(filePath.toString());
|
||
// 进入并设置为当前目录
|
||
sftp.cd(filePath.toString());
|
||
}
|
||
}
|
||
sftp.cd(createpath);
|
||
} catch (SftpException e) {
|
||
// throw new SystemException("创建路径错误:" + createpath);
|
||
}
|
||
}
|
||
|
||
public static boolean isDirExist(String directory, ChannelSftp sftp) {
|
||
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;
|
||
}
|
||
|
||
public String saveFile(MultipartFile multipartFile) throws Exception {
|
||
return this.saveFile(multipartFile, Const.FILEPATHFILE);
|
||
}
|
||
|
||
public String saveFile(MultipartFile file, String cost) throws Exception {
|
||
return this.saveFile(file, cost, Const.FILEPATHFILE);
|
||
}
|
||
|
||
public String saveFile(MultipartFile file, String modular, String path) throws Exception {
|
||
String fileName = Warden.get32UUID() + file.getOriginalFilename().substring(file.getOriginalFilename().lastIndexOf("."));
|
||
byte[] bytes = file.getBytes();
|
||
String ffile = DateUtil.getDays();
|
||
if (StringUtils.isNotBlank(modular)) {
|
||
this.sshSftp(file, fileName, path + modular + "/" + ffile);
|
||
return path + modular + "/" + ffile + "/" + fileName;
|
||
} else {
|
||
this.sshSftp(file, fileName, path + ffile);
|
||
return path + ffile + "/" + fileName;
|
||
}
|
||
}
|
||
|
||
/**
|
||
* 删除文件
|
||
*
|
||
* @throws SftpException
|
||
* @throws JSchException
|
||
*/
|
||
public void deleteFile(String directoryFile) throws Exception {
|
||
|
||
OSS ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret);
|
||
|
||
try {
|
||
// 删除文件或目录。如果要删除目录,目录必须为空。
|
||
ossClient.deleteObject(bucketName, "YTHFile" + directoryFile);
|
||
} catch (OSSException oe) {
|
||
PageData pd = new PageData();
|
||
pd.put("FILE_PATH",directoryFile);
|
||
fileUploadLogService.delete(pd);
|
||
System.out.println("Caught an OSSException, which means your request made it to OSS, "
|
||
+ "but was rejected with an error response for some reason.");
|
||
System.out.println("Error Message:" + oe.getErrorMessage());
|
||
System.out.println("Error Code:" + oe.getErrorCode());
|
||
System.out.println("Request ID:" + oe.getRequestId());
|
||
System.out.println("Host ID:" + oe.getHostId());
|
||
} catch (ClientException ce) {
|
||
System.out.println("Caught an ClientException, which means the client encountered "
|
||
+ "a serious internal problem while trying to communicate with OSS, "
|
||
+ "such as not being able to access the network.");
|
||
System.out.println("Error Message:" + ce.getMessage());
|
||
} finally {
|
||
if (ossClient != null) {
|
||
ossClient.shutdown();
|
||
}
|
||
}
|
||
|
||
}
|
||
}
|
||
|
||
|