***
9443 ワード
一.APPアップロードサービスを開発するには、ストレージのサポートが必要です.では、EMCのソリューションは次のようになります.
1.1直接画像をサービスのハードディスクに保存する 1. 利点:開発が便利で、コストが 低い 2. 欠点:拡張困難 1.2分散ファイルシステムによるストレージ 1. 利点:拡張 を容易に実現 2. 欠点:開発の複雑さがやや大きい(特に複雑な機能を開発する) 1.3 nfsを使用したストレージ 1. 利点:開発が便利 2. 欠点:24,5679182の導入とメンテナンスに関する知識が必要です.
1.4サードパーティのストレージサービスの使用 1. 利点:開発が簡単で、強力な機能を持ち、メンテナンスフリー 2. 欠点:料金 ここでは、第1、4のソリューションを採用し、サードパーティのサービスはアリクラウドのOSSサービスを選択します.
二.コンフィギュレーション
2.1依存のインポート
2.2 aliyun.propertiesプロファイル
2.3 AliyunConfigの作成
三.ファイルアップロード(画像、APP)
3.1画像
3.2 APP-OSS
3.2 APP-サーバ
1.1直接画像をサービスのハードディスクに保存する
1.4サードパーティのストレージサービスの使用
二.コンフィギュレーション
2.1依存のインポート
com.aliyun.oss
aliyun-sdk-oss
2.8.3
2.2 aliyun.propertiesプロファイル
aliyun.endpoint=
aliyun.accessKeyId=
aliyun.accessKeySecret=
aliyun.bucketName=
aliyun.urlPrefix=
2.3 AliyunConfigの作成
@Configuration
@PropertySource(value = {"classpath:aliyun.properties"})
@ConfigurationProperties(prefix = "aliyun")
@Data
public class AliyunConfig {
private String endpoint;
private String accessKeyId;
private String accessKeySecret;
private String bucketName;
private String urlPrefix;
@Bean
public OSS oSSClient() {
return new OSSClient(endpoint, accessKeyId, accessKeySecret);
}
}
三.ファイルアップロード(画像、APP)
3.1画像
//
private static final String[] IMAGE_TYPE = new String[]{".bmp", ".jpg",
".jpeg", ".gif", ".png"};
3.2 APP-OSS
/**
* APK oss
*
* @param request
* @return
*/
// @RequestMapping(value = "/upload", method = RequestMethod.POST)
@ResponseBody
public Map upload(HttpServletRequest request) {
try {
MultipartHttpServletRequest fileRequest = (MultipartHttpServletRequest) request;
MultipartFile file = fileRequest.getFile("file");
InputStream inputStream = file.getInputStream();
String name = file.getOriginalFilename();
systemOperLogWrite.systemLogWrite(" ", SystemOperLog.LOG_TYPE_INSERT, systemOperLogWrite.objectToString(name));
//
String localMd5 = AliyunOSSClientUtil.getLocalMd5(file);
AppVersionVo vo = new AppVersionVo();
vo.setMd5(localMd5);
List appVersionEntities = appVersionDubboService.findByVo(vo);
if (CollectionUtils.isNotEmpty(appVersionEntities)) {
return ResultUtil.getFailResJson(" ", AcsConstent.BACK_FAILED_CODE);
}
String keyNeme = "";
if (StringUtils.isBlank(name)) {
return ResultUtil.getFailResJson(" ");
}
if (name.endsWith(AcsConstent.APP.endWithName)) {
keyNeme = AcsConstent.APP.startFileName + StringUtils.getUUID() + AcsConstent.APP.endWithName;
} else {
return ResultUtil.getFailResJson(AcsConstent.APP.uploaFileNameError, AcsConstent.BACK_FAILED_CODE);
}
long size = 1;
if (file.getSize() > AcsConstent.INT_NUM_KB) {
size = file.getSize() / AcsConstent.INT_NUM_KB / AcsConstent.INT_NUM_KB;
}
// String bucketName = "aiot-face-image";
SystemConfigEntity systemConfigField = systemConfigDubboService.getSystemConfigField(Constants.Aliyun_BucketName);
String bucketName = systemConfigField.getValue();
// Endpoint , Region
// String endpoint = "http://oss-cn-shenzhen.aliyuncs.com";
SystemConfigEntity systemConfigField1 = systemConfigDubboService.getSystemConfigField(Constants.Aliyun_Endpoint);
String endpoint = systemConfigField1.getValue();
SystemConfigEntity accessKey = systemConfigDubboService.getSystemConfigField(Constants.Aliyun_AccessKeyId);
String accessKeyId = accessKey.getValue();
SystemConfigEntity accessSecret = systemConfigDubboService.getSystemConfigField(Constants.Aliyun_AccessKeySecret);
String accessKeySecret = AESUtil.aesDecrypt(accessSecret.getValue(), AcsConstent.APP.AccessKeySecret_DecryptKey);
// OSSClient
OSSClient ossClient = new OSSClient(endpoint, accessKeyId, accessKeySecret);
//
ObjectMetadata metadata = new ObjectMetadata();
//
metadata.setContentLength(inputStream.available());
// Object
metadata.setCacheControl("no-cache");
// Object Header
metadata.setHeader("Pragma", "no-cache");
// Object
metadata.setContentEncoding("utf-8");
// MIME, , 、 。 Key
// application/octet-stream
metadata.setContentType(AliyunOSSClientUtil.getContentType(name));
// Object ( MINME , , )
PutObjectResult putResult = ossClient.putObject(bucketName, keyNeme, inputStream, metadata);
String eTag = putResult.getETag();
// OSSClient
ossClient.shutdown();
Date expiration = new Date(System.currentTimeMillis() + AcsConstent.APP.EXPIRE_DAY);
String url = ossClient.generatePresignedUrl(bucketName, keyNeme, expiration).toString();
JSONObject jsonObject = new JSONObject();
jsonObject.put("url", url);
jsonObject.put("MD5", eTag);
jsonObject.put("appSize", size);
return StringUtils.isNotBlank(url) ? ResultUtil.getSuccessResJson("data", jsonObject.toString()) : ResultUtil.getFailResJson(" ", "1");
} catch (Exception e) {
logger.info(" ###################{}", e);
}
return null;
}
3.2 APP-サーバ
@RequestMapping(value = "/upload", method = RequestMethod.POST)
@ResponseBody
public Map uploadApk(HttpServletRequest request) {
FileOutputStream fileOutputStream = null;
InputStream inputStream = null;
try {
MultipartHttpServletRequest fileRequest = (MultipartHttpServletRequest) request;
MultipartFile file = fileRequest.getFile("file");
inputStream = file.getInputStream();
String fileName = file.getOriginalFilename();
//
String localMd5 = AliyunOSSClientUtil.fileToMd5(file);
JSONObject checkJson = checkPamams(localMd5, fileName);
if (checkJson != null) {
return checkJson;
}
long size = 1;
if (file.getSize() > AcsConstent.INT_NUM_KB) {
size = file.getSize() / AcsConstent.INT_NUM_KB / AcsConstent.INT_NUM_KB;
}
String downloadFileUrl = redisOperatorManager.getValue("upload.file.url", CommonConstants.SYSTEM_CONFIG_REDIS_INDEX, "http://%s:%s/acs-admin/system/fileManager/downloadFileByKey?key=%s");
downloadFileUrl = String.format(downloadFileUrl, host, port, localMd5);
String fileUploadPath = fileUploadBasePath + File.separator + "app";
File fileUploadPathFile = new File(fileUploadPath);
if (!fileUploadPathFile.exists()) {
fileUploadPathFile.mkdirs();
}
// md5
String keyName = localMd5 + AcsConstent.APP.endWithName;
String fileUploadFileName = fileUploadPath + File.separator + keyName;
File fileUploadFile = new File(fileUploadFileName);
if (!fileUploadFile.exists()) {
fileUploadFile.createNewFile();
}
fileOutputStream = new FileOutputStream(fileUploadFile);
IOUtils.copy(inputStream, fileOutputStream);
JSONObject jsonObject = new JSONObject();
jsonObject.put("url", downloadFileUrl);
jsonObject.put("MD5", localMd5);
jsonObject.put("appSize", size);
jsonObject.put("originalFilename", fileName);
FileUploadVo fileUploadVo = new FileUploadVo();
fileUploadVo.setFilePath(fileUploadPath);
fileUploadVo.setFileName(keyName);
fileUploadVo.setMd5(localMd5);
//
notifyFileUploadZk(fileUploadVo);
systemOperLogWrite.systemLogWrite(" ", SystemOperLog.LOG_TYPE_INSERT, jsonObject.toJSONString());
return ResultUtil.getSuccessResJson("data", jsonObject.toString());
} catch (RuntimeException e){
logger.info(" ###################{}", e);
} catch (Exception e) {
logger.info(" ###################{}", e);
} finally {
IOUtils.closeQuietly(fileOutputStream);
IOUtils.closeQuietly(inputStream);
}
return ResultUtil.getFailResJson(" ", "1");
}