From bc3b37b1622091def1f6ee4c3eb3ff79499b3466 Mon Sep 17 00:00:00 2001 From: EricsHu <hrr145632> Date: 星期一, 19 六月 2023 10:19:14 +0800 Subject: [PATCH] 数据可视化 --- src/main/java/com/qxueyou/scc/teach/res/service/impl/HweiYunOBSServiceImpl.java | 177 +++++++++++++++++++++++++++++++++++++++++++++++++++------- 1 files changed, 155 insertions(+), 22 deletions(-) diff --git a/src/main/java/com/qxueyou/scc/teach/res/service/impl/HweiYunOBSServiceImpl.java b/src/main/java/com/qxueyou/scc/teach/res/service/impl/HweiYunOBSServiceImpl.java index 9f3ab60..3413b40 100644 --- a/src/main/java/com/qxueyou/scc/teach/res/service/impl/HweiYunOBSServiceImpl.java +++ b/src/main/java/com/qxueyou/scc/teach/res/service/impl/HweiYunOBSServiceImpl.java @@ -1,29 +1,37 @@ package com.qxueyou.scc.teach.res.service.impl; - + //import com.example.study.springboot.background.service.HweiYunOBSService; //import com.example.study.springboot.config.HweiOBSConfig; import com.obs.services.ObsClient; import com.obs.services.exception.ObsException; import com.obs.services.model.*; +import com.qxueyou.scc.base.model.FileMeta; +import com.qxueyou.scc.base.model.Result; import com.qxueyou.scc.base.util.CollectionUtils; import com.qxueyou.scc.base.util.QFileUtils; import com.qxueyou.scc.base.util.UUIDUtils; import com.qxueyou.scc.config.HweiOBSConfig; +import com.qxueyou.scc.teach.res.model.ResFile; import com.qxueyou.scc.teach.res.service.HweiYunOBSService; +import com.qxueyou.scc.teach.res.service.IFileService; import lombok.extern.slf4j.Slf4j; +import org.apache.catalina.core.ApplicationPart; import org.apache.commons.lang3.StringUtils; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; +import org.aspectj.util.FileUtil; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.web.multipart.MultipartFile; - + +import javax.servlet.http.HttpServletResponse; +import java.io.File; import java.io.IOException; import java.io.InputStream; -import java.util.Calendar; -import java.util.GregorianCalendar; -import java.util.List; -import java.util.Map; +import java.util.*; +import java.util.concurrent.ExecutorService; +import java.util.concurrent.Executors; +import java.util.concurrent.TimeUnit; /** * @ClassName: HweiYunOBSServiceImpl @@ -39,6 +47,9 @@ private final Logger log = LogManager.getLogger(HweiYunOBSServiceImpl.class); @Autowired private HweiOBSConfig hweiOBSConfig; + + @Autowired + FileService fileService; public final static String FILE_TYPE_VIDEO = "video"; @@ -65,7 +76,7 @@ "JPG", FILE_TYPE_IMG,"JPEG", FILE_TYPE_IMG, "GIF", FILE_TYPE_IMG, "BMP", FILE_TYPE_IMG, "PNG", FILE_TYPE_IMG ); - + @Override public boolean delete(String objectKey) { ObsClient obsClient = null; @@ -81,7 +92,7 @@ } return true; } - + @Override public boolean delete(List<String> objectKeys) { ObsClient obsClient = null; @@ -99,10 +110,13 @@ } return false; } - + + @Override - public String fileUpload(MultipartFile uploadFile, String objectKey) { + public List<FileMeta> fileUpload(MultipartFile uploadFile, String objectKey) { ObsClient obsClient = null; + List<FileMeta> files = new ArrayList<FileMeta>(2); + FileMeta fileMeta = null; try { String destPath = getDestPath(objectKey); String bucketName = hweiOBSConfig.getBucketName(); @@ -118,19 +132,29 @@ } InputStream inputStream = uploadFile.getInputStream(); long available = inputStream.available(); -// PutObjectRequest request = new PutObjectRequest(bucketName,objectKey,inputStream); PutObjectRequest request = new PutObjectRequest(bucketName,destPath,inputStream); ObjectMetadata objectMetadata = new ObjectMetadata(); objectMetadata.setContentLength(available); request.setMetadata(objectMetadata); -// request. // 璁剧疆瀵硅薄璁块棶鏉冮檺涓哄叕鍏辫 request.setAcl(AccessControlList.REST_CANNED_PUBLIC_READ); PutObjectResult result = obsClient.putObject(request); - + fileMeta = new FileMeta(); + ResFile file = fileService.insertFileToDBTwo(objectKey, uploadFile.getSize(), result.getObjectUrl(), uploadFile.getContentType()); +// SetObjectMetadataRequest ObjectMetadataRequest = new SetObjectMetadataRequest(bucketName, destPath); +// ObjectMetadataRequest.setContentDisposition("inline"); +// obsClient.setObjectMetadata(ObjectMetadataRequest); + + fileMeta.setFileId(file.getFileId()); + fileMeta.setPath(result.getObjectUrl()); + fileMeta.setFileSize(uploadFile.getSize() / 1024 + "kb"); + fileMeta.setFileType(uploadFile.getContentType()); + fileMeta.setFileName(objectKey); + files.add(fileMeta); // 璇诲彇璇ュ凡涓婁紶瀵硅薄鐨刄RL log.info("宸蹭笂浼犲璞$殑URL" + result.getObjectUrl()); - return result.getObjectUrl(); + return files; +// return result.getObjectUrl(); } catch (ObsException e) { log.error("obs涓婁紶澶辫触", e); } catch (IOException e) { @@ -141,20 +165,129 @@ return null; } + @Override + public List<FileMeta> fnepian(MultipartFile uploadFile, String objectKey) throws IOException { + ObsClient obsClient = null; + List<FileMeta> files = new ArrayList<FileMeta>(2); + FileMeta fileMeta = null; + // 姣忎釜鍒嗙墖鐨勫ぇ灏忥紝鐢ㄤ簬璁$畻鏂囦欢鏈夊灏戜釜鍒嗙墖銆傚崟浣嶄负瀛楄妭銆� + final long partSize = 10 * 1024 * 1024L; //10 MB銆� + String bucketName = hweiOBSConfig.getBucketName(); + obsClient = hweiOBSConfig.getInstance(); + // objectName 鏄矾寰勶紝鍒嗙墖鏂囦欢鏈�缁堟暣鍚堢殑璺緞 + String objectName = "multipartUpload/"+objectKey; + // 鍒涘缓InitiateMultipartUploadRequest瀵硅薄銆� + InitiateMultipartUploadRequest request = new InitiateMultipartUploadRequest(bucketName, objectName); + InitiateMultipartUploadResult prebuilt = obsClient.initiateMultipartUpload(request); + InputStream inputStream = uploadFile.getInputStream(); + // 鑾峰彇鍏ㄥ眬id + String uploadId = prebuilt.getUploadId(); + // 濡傛灉骞跺彂閲忓ぇ鐨勮瘽 鍒濆鍖栫嚎绋嬫睜 20绾跨▼鏁伴噺 + // ExecutorService executorService = Executors.newFixedThreadPool(20); + // partTags鏄疨artEtag鐨勯泦鍚堛�侾artEtag鐢卞垎鐗囩殑ETag鍜屽垎鐗囧彿缁勬垚銆� + List<PartEtag> partTags = new ArrayList<PartEtag>(); + File file = MultipartFileToFile(uploadFile); + // 璁$畻鏈夊灏戜釜鍒嗙墖 + int partCount = (int) (file.length() / partSize); + // 濡傛灉鍙栦綑鏁颁笉涓洪浂鍒欒拷鍔犱竴涓� + if (file.length() % partSize != 0) { + partCount++; + } + + try { + for (int i = 0; i < partCount; i++) { + long startPos = i * partSize; + long curPartSize = (i + 1 == partCount) ? (file.length() - startPos) : partSize; + // 璺宠繃宸茬粡涓婁紶鐨勫垎鐗囥�� + inputStream.skip(startPos); + UploadPartRequest uploadPartRequest = new UploadPartRequest(); + uploadPartRequest.setBucketName(bucketName); + uploadPartRequest.setObjectKey(objectName); + uploadPartRequest.setUploadId(uploadId); + uploadPartRequest.setInput(inputStream); + // 璁剧疆鍒嗙墖澶у皬銆傞櫎浜嗘渶鍚庝竴涓垎鐗囨病鏈夊ぇ灏忛檺鍒讹紝鍏朵粬鐨勫垎鐗囨渶灏忎负100 KB銆� + uploadPartRequest.setPartSize(curPartSize); + // 璁剧疆鍒嗙墖鍙枫�傛瘡涓�涓笂浼犵殑鍒嗙墖閮芥湁涓�涓垎鐗囧彿锛屽彇鍊艰寖鍥存槸1~10000锛屽鏋滆秴鍑烘鑼冨洿锛孫bs灏嗚繑鍥濱nvalidArgument閿欒鐮併�� + uploadPartRequest.setPartNumber( i + 1); + // 姣忎釜鍒嗙墖涓嶉渶瑕佹寜椤哄簭涓婁紶锛岀敋鑷冲彲浠ュ湪涓嶅悓瀹㈡埛绔笂浼狅紝obs浼氭寜鐓у垎鐗囧彿鎺掑簭缁勬垚瀹屾暣鐨勬枃浠躲�� + UploadPartResult uploadPartResult = obsClient.uploadPart(uploadPartRequest); + // 姣忔涓婁紶鍒嗙墖涔嬪悗锛孫bS鐨勮繑鍥炵粨鏋滃寘鍚玃artETag銆侾artETag灏嗚淇濆瓨鍦╬artTags涓�� + partTags.add(new PartEtag(uploadPartResult.getEtag(), uploadPartResult.getPartNumber())); + } + // 寮�濮嬬嚎绋嬫睜鏃跺�欎娇鐢細绛夊緟涓婁紶瀹屾垚 + /* executorService.shutdown(); + while (!executorService.isTerminated()) + { + try + { + executorService.awaitTermination(5, TimeUnit.SECONDS); + } + catch (InterruptedException e) + { + e.printStackTrace(); + } + }*/ + fileMeta = new FileMeta(); + // 鍚堝苟鍒嗙墖娈� + // 鍦ㄦ墽琛屽畬鎴愬垎鐗囦笂浼犳搷浣滄椂锛岄渶瑕佹彁渚涙墍鏈夋湁鏁堢殑partETags銆俹bs鏀跺埌鎻愪氦鐨刾artETags鍚庯紝浼氶�愪竴楠岃瘉姣忎釜鍒嗙墖鐨勬湁鏁堟�с�傚綋鎵�鏈夌殑鏁版嵁鍒嗙墖楠岃瘉閫氳繃鍚庯紝obs灏嗘妸杩欎簺鍒嗙墖缁勫悎鎴愪竴涓畬鏁寸殑鏂囦欢銆� + CompleteMultipartUploadRequest multipartUploadRequest = new CompleteMultipartUploadRequest(bucketName, objectName, uploadId, partTags); + // 瀹屾垚鍒嗙墖涓婁紶銆� + CompleteMultipartUploadResult completeMultipartUploadResult = obsClient.completeMultipartUpload(multipartUploadRequest); + // 杩斿洖鍏ㄥ眬id锛屾《鍚嶏紝瀵硅薄鍚嶇О 鐢ㄤ簬鍚庣画澶勭悊 姣斿鍙栨秷鍒嗙墖涓婁紶锛屾煡璇㈠垎鐗囦俊鎭瓑 + fileMeta.setPath(completeMultipartUploadResult.getObjectUrl()); + fileMeta.setFileSize(uploadFile.getSize() / 1024 + "kb"); + fileMeta.setFileType(uploadFile.getContentType()); + fileMeta.setFileName(objectKey); + files.add(fileMeta); + return files; + }catch (Exception e){ + log.error("鍒嗙墖寰幆涓婁紶澶辫触锛�"+e.getMessage()); + return null; + } + } + public static File MultipartFileToFile(MultipartFile multiFile) { + // 鑾峰彇鏂囦欢鍚� + String fileName = multiFile.getOriginalFilename(); + // 鑾峰彇鏂囦欢鍚庣紑 + String prefix = fileName.substring(fileName.lastIndexOf(".")); + // 鑻ラ』瑕侀槻姝㈢敓鎴愮殑涓存椂鏂囦欢閲嶅,鑳藉鍦ㄦ枃浠跺悕鍚庢坊鍔犻殢鏈虹爜 + + try { + File file = File.createTempFile(getFileNameNotPrefix(fileName), prefix); + multiFile.transferTo(file); + return file; + } catch (Exception e) { + e.printStackTrace(); + } + return null; + } + /** + * 鑾峰彇鏂囦欢鍚嶄笉甯﹀悗缂� + * + * @param fileName + * @return + */ + public static String getFileNameNotPrefix(String fileName) { + String prefix = fileName.substring(fileName.indexOf(".")); + int num = prefix.length();//寰楀埌鍚庣紑鍚嶉暱搴� + String fileOtherName = fileName.substring(0, fileName.length() - num);//寰楀埌鏂囦欢鍚嶃�傚幓鎺変簡鍚庣紑 + return fileOtherName; + } + private String getDestPath(String name) { String fileType = getFileType(name); StringBuffer path = new StringBuffer(128); - path.append(fileType); +// path.append(fileType); Calendar now = new GregorianCalendar(); - path.append('/'); - path.append(now.get(Calendar.YEAR)); - path.append(StringUtils.leftPad(String.valueOf(now.get(Calendar.MONTH)), 2, '0')); - path.append('/'); - path.append(now.get(Calendar.DAY_OF_MONTH)); - path.append('/'); +// path.append('/'); +// path.append(now.get(Calendar.YEAR)); +// path.append(StringUtils.leftPad(String.valueOf(now.get(Calendar.MONTH)), 2, '0')); +// path.append('/'); +// path.append(now.get(Calendar.DAY_OF_MONTH)); +// path.append('/'); path.append(UUIDUtils.UUID()); path.append('.'); path.append(QFileUtils.getFileFormat(name)); @@ -182,4 +315,4 @@ } return null; } -} \ No newline at end of file +} -- Gitblit v1.8.0