|
|
|
package com.fr.plugin.file.submit.oss.fun;
|
|
|
|
|
|
|
|
import com.aliyun.oss.OSSClient;
|
|
|
|
import com.fr.cache.Attachment;
|
|
|
|
import com.fr.general.FArray;
|
|
|
|
import com.fanruan.api.util.GeneralKit;
|
|
|
|
import com.fanruan.api.i18n.I18nKit;
|
|
|
|
import com.fr.script.Calculator;
|
|
|
|
import com.fr.stable.ArrayUtils;
|
|
|
|
import com.fanruan.api.util.StringKit;
|
|
|
|
import com.fr.stable.xml.FRFile;
|
|
|
|
|
|
|
|
import java.io.ByteArrayInputStream;
|
|
|
|
|
|
|
|
public class OssUpload {
|
|
|
|
|
|
|
|
public static void upload(Calculator calculator, OSSClient ossClient, OssSubmitTargetConfig submitTargetConfig)
|
|
|
|
throws Exception {
|
|
|
|
OssSubmitTarget[] submitTargets = submitTargetConfig.getSubmitTargets();
|
|
|
|
for (OssSubmitTarget target : submitTargets) {
|
|
|
|
OssVariableValue fileObject = target.getFile();
|
|
|
|
String filePath = GeneralKit.objectToString(fileObject);
|
|
|
|
Object file = calculator.evalValue(filePath);
|
|
|
|
|
|
|
|
uploadFile(ossClient, target.getBucket(), file,
|
|
|
|
target.getDirectory() == null ? null : target.getDirectory().getResult(calculator),
|
|
|
|
target.getName() == null ? null : target.getName().getResult(calculator));
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
private static void uploadFile(OSSClient ossClient, String bucket, Object file, String directory,
|
|
|
|
String newFileName) {
|
|
|
|
if (file instanceof FRFile) {
|
|
|
|
uploadSingleFile(ossClient, bucket, directory, combineName(((FRFile) file).getFileName(), newFileName),
|
|
|
|
((FRFile) file).getBytes());
|
|
|
|
} else if (file instanceof FArray && ((FArray) file).length() != 0) {
|
|
|
|
FArray array = (FArray) file;
|
|
|
|
for (int i = 0; i < array.length(); i++) {
|
|
|
|
Object element = array.elementAt(i);
|
|
|
|
if (!(element instanceof Attachment)) {
|
|
|
|
if (element instanceof FArray) {
|
|
|
|
uploadFile(ossClient, bucket, element, directory, newFileName);
|
|
|
|
}
|
|
|
|
} else {
|
|
|
|
uploadSingleFile(ossClient, bucket, directory,
|
|
|
|
combineName(((Attachment) element).getFilename(), newFileName),
|
|
|
|
((Attachment) element).getBytes());
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
private static void uploadSingleFile(OSSClient ossClient, String bucket, String directory, String newFileName,
|
|
|
|
byte[] bytes) {
|
|
|
|
if (ArrayUtils.isEmpty(bytes)) {
|
|
|
|
throw new RuntimeException(I18nKit.getLocText("Plugin-File_Submit_Oss_Failed", newFileName));
|
|
|
|
}
|
|
|
|
ossClient.putObject(bucket, directory + "/" + newFileName, new ByteArrayInputStream(bytes));
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* 这里的逻辑是: 1、如果没有设置文件名,就用上传的文件的名字; 2、如果设置了文件名,且带有文件后缀,就用设置的文件名; 3、其他情况都用原文件名。
|
|
|
|
*/
|
|
|
|
private static String combineName(String fileName, String myFileName) {
|
|
|
|
String realFileName;
|
|
|
|
if (StringKit.isBlank(fileName)) {
|
|
|
|
fileName = "unnamed.png";
|
|
|
|
}
|
|
|
|
if (StringKit.isNotEmpty(myFileName)) {
|
|
|
|
realFileName = myFileName;
|
|
|
|
// int index = myFileName.lastIndexOf(".");
|
|
|
|
// if (index == -1) {
|
|
|
|
// realFileName = fileName;
|
|
|
|
// } else {
|
|
|
|
// realFileName = myFileName;
|
|
|
|
// }
|
|
|
|
} else {
|
|
|
|
realFileName = fileName;
|
|
|
|
}
|
|
|
|
return realFileName;
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|