| | |
| | | package com.ycl.utils; |
| | | |
| | | |
| | | import com.github.tobato.fastdfs.domain.fdfs.StorePath; |
| | | import com.github.tobato.fastdfs.domain.upload.FastImageFile; |
| | | import com.github.tobato.fastdfs.service.FastFileStorageClient; |
| | | import com.ycl.dto.media.PictureZoomParameter; |
| | | import com.ycl.dto.media.Media; |
| | | import net.coobird.thumbnailator.Thumbnails; |
| | | import org.springframework.beans.factory.annotation.Autowired; |
| | | import org.springframework.beans.factory.annotation.Value; |
| | | import org.springframework.stereotype.Component; |
| | | import org.springframework.util.StringUtils; |
| | | import org.springframework.web.multipart.MultipartFile; |
| | | |
| | | import javax.annotation.PostConstruct; |
| | | import java.awt.image.BufferedImage; |
| | | import java.io.*; |
| | | import java.time.format.DateTimeFormatter; |
| | | import java.util.List; |
| | | import java.util.regex.Pattern; |
| | | |
| | | @Component |
| | | public class MediaFileUtil { |
| | | |
| | | |
| | | private static MediaFileUtil self; |
| | | @Value("${fdfs.groupName}") |
| | | private String groupName; |
| | | |
| | | @PostConstruct |
| | | private void init() { |
| | | self = this; |
| | | } |
| | | |
| | | |
| | | @Autowired |
| | | private FastFileStorageClient storageClient; |
| | | |
| | | |
| | | private static final Pattern videoPattern = Pattern.compile("((mp4|flv|avi|rm|rmvb|wmv)(jpg|png|gif|bmp))"); |
| | | |
| | | @Value("${cfg.res}") |
| | | private String rootPath; |
| | | |
| | | private final DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern("yyyyMM"); |
| | | |
| | | |
| | | public MediaFileUtil() throws IOException { |
| | | |
| | | } |
| | | |
| | | |
| | | public static String uploadImage(InputStream in) throws IOException { |
| | | |
| | | return self.storageClient.uploadImage(new FastImageFile(in, in.available(), "jpg", null)).getFullPath(); |
| | | } |
| | | |
| | | |
| | | public static String uploadImage(File file) throws IOException { |
| | | |
| | | FileInputStream in = new FileInputStream(file); |
| | | return self.storageClient.uploadImage(new FastImageFile(in, in.available(), "jpg", null)).getFullPath(); |
| | | } |
| | | |
| | | |
| | | /** |
| | | * 判断文件类型 |
| | | * |
| | | * @param fileName |
| | | * @return |
| | | */ |
| | | public Short getType(String fileName) { |
| | | |
| | | String ext = fileName.substring(fileName.lastIndexOf(".")).toLowerCase(); |
| | | |
| | | if (".jpg".equals(ext) || ".jpeg".equals(ext) || ".png".equals(ext) || ".gif".equals(ext) || ".bmp".equals(ext)) { |
| | | return 1; |
| | | } else if (".mp4".equals(ext) || ".avi".equals(ext) || ".flv".equals(ext) || ".rm".equals(ext) || ".wmv".equals(ext)) { |
| | | return 2; |
| | | } else { |
| | | return 0; |
| | | } |
| | | } |
| | | |
| | | public Media save(MultipartFile file, PictureZoomParameter zoomPar) throws Exception { |
| | | String[] fs = file.getOriginalFilename().split("\\."); |
| | | String ext = fs[fs.length - 1]; |
| | | |
| | | switch (this.getType(file.getOriginalFilename())) { |
| | | case 1: |
| | | return this.savePicture(file, ext, zoomPar); |
| | | case 2: |
| | | return this.saveVideo(file, ext); |
| | | default: |
| | | return new Media(); |
| | | } |
| | | } |
| | | |
| | | public String savePicture(InputStream inputStream, String ext) throws Exception { |
| | | StorePath sp = storageClient.uploadFile(groupName, inputStream, inputStream.available(), ext); |
| | | return sp.getFullPath(); |
| | | } |
| | | |
| | | public Media savePicture(MultipartFile file, String ext, PictureZoomParameter zoomPar) throws Exception { |
| | | |
| | | ByteArrayOutputStream outs = new ByteArrayOutputStream(); |
| | | Media media = new Media(); |
| | | media.setType(ext); |
| | | String path = null; |
| | | if (zoomPar.getWidth1() != null && zoomPar.getWidth1() > 0) { |
| | | path = this.thumbAndStorageOfFile(file, ext, zoomPar.getWidth1()); |
| | | media.setUrl1(path); |
| | | } |
| | | if (zoomPar.getWidth2() != null && zoomPar.getWidth2() > 0) { |
| | | path = this.thumbAndStorageOfFile(file, ext, zoomPar.getWidth2()); |
| | | media.setUrl2(path); |
| | | } |
| | | if (zoomPar.getWidth3() != null && zoomPar.getWidth3() > 0) { |
| | | path = this.thumbAndStorageOfFile(file, ext, zoomPar.getWidth3()); |
| | | media.setUrl3(path); |
| | | } |
| | | // width4为原图 |
| | | path = this.thumbAndStorageOfFile(file, ext, zoomPar.getWidth4()); |
| | | media.setUrl4(path); |
| | | return media; |
| | | } |
| | | |
| | | /** |
| | | * 保存视频文件 |
| | | * |
| | | * @param file |
| | | * @param ext |
| | | * @return |
| | | * @throws Exception |
| | | */ |
| | | public Media saveVideo(MultipartFile file, String ext) throws Exception { |
| | | // StorePath sp = storageClient.uploadFile(file.getInputStream(), file.getSize(), ext, null); |
| | | |
| | | StorePath sp = storageClient.uploadFile(groupName, file.getInputStream(), file.getSize(), ext); |
| | | Media media = new Media(); |
| | | media.setType(ext); |
| | | media.setUrl1(sp.getFullPath()); |
| | | return media; |
| | | } |
| | | |
| | | /** |
| | | * 删除一个文件 |
| | | * |
| | | * @param rootPath |
| | | */ |
| | | public void removeFile(String rootPath) { |
| | | storageClient.deleteFile(rootPath); |
| | | } |
| | | |
| | | public void removeMedia(Media media) { |
| | | if (!StringUtils.isEmpty(media.getUrl1())) { |
| | | storageClient.deleteFile(media.getUrl1()); |
| | | } |
| | | if (!StringUtils.isEmpty(media.getUrl2())) { |
| | | storageClient.deleteFile(media.getUrl2()); |
| | | } |
| | | if (!StringUtils.isEmpty(media.getUrl3())) { |
| | | storageClient.deleteFile(media.getUrl3()); |
| | | } |
| | | if (!StringUtils.isEmpty(media.getUrl4())) { |
| | | storageClient.deleteFile(media.getUrl4()); |
| | | } |
| | | } |
| | | |
| | | |
| | | public void removeMedias(List<Media> medias) { |
| | | if (medias != null) { |
| | | for (Media m : medias) { |
| | | if (!StringUtils.isEmpty(m.getUrl1())) { |
| | | storageClient.deleteFile(m.getUrl1()); |
| | | } |
| | | if (!StringUtils.isEmpty(m.getUrl2())) { |
| | | storageClient.deleteFile(m.getUrl2()); |
| | | } |
| | | if (!StringUtils.isEmpty(m.getUrl3())) { |
| | | storageClient.deleteFile(m.getUrl3()); |
| | | } |
| | | if (!StringUtils.isEmpty(m.getUrl4())) { |
| | | storageClient.deleteFile(m.getUrl4()); |
| | | } |
| | | } |
| | | } |
| | | |
| | | } |
| | | |
| | | /** |
| | | * 判断文件是否存在 |
| | | * |
| | | * @param url |
| | | * @return |
| | | */ |
| | | public Boolean isEmpty(String url) { |
| | | return true; |
| | | } |
| | | |
| | | /** |
| | | * 缩放并且上传 |
| | | * |
| | | * @param in |
| | | * @param ext |
| | | * @param width |
| | | * @return |
| | | * @throws Exception |
| | | */ |
| | | private String thumbAndStorage(InputStream in, String ext, Integer width) throws Exception { |
| | | |
| | | Thumbnails.Builder fileBuilder = Thumbnails.of(in).scale(1.0).outputQuality(1.0); |
| | | BufferedImage src = fileBuilder.asBufferedImage(); |
| | | |
| | | Integer w = src.getWidth(null); |
| | | Integer destWidth = width > w ? w : width; |
| | | |
| | | ByteArrayOutputStream bouts = new ByteArrayOutputStream(); |
| | | Thumbnails.of(in).width(destWidth).toOutputStream(bouts); |
| | | InputStream ins = this.out2In(bouts); |
| | | |
| | | StorePath sp = storageClient.uploadFile(groupName, ins, bouts.size(), ext); |
| | | // StorePath sp = storageClient.uploadFile(ins, bouts.size(), ext, null); |
| | | bouts.close(); |
| | | ins.close(); |
| | | return sp.getFullPath(); |
| | | } |
| | | |
| | | private String thumbAndStorageOfFile(MultipartFile file, String ext, Integer width) throws Exception { |
| | | |
| | | Thumbnails.Builder fileBuilder = Thumbnails.of(file.getInputStream()).scale(1.0).outputQuality(1.0); |
| | | BufferedImage src = fileBuilder.asBufferedImage(); |
| | | |
| | | Integer w = src.getWidth(null); |
| | | Integer destWidth = width == null || width > w ? w : width; |
| | | |
| | | ByteArrayOutputStream bouts = new ByteArrayOutputStream(); |
| | | Thumbnails.of(file.getInputStream()).width(destWidth).toOutputStream(bouts); |
| | | InputStream ins = this.out2In(bouts); |
| | | StorePath sp = storageClient.uploadFile(groupName, ins, bouts.size(), ext); |
| | | // StorePath sp = storageClient.uploadFile(ins, bouts.size(), ext, null); |
| | | bouts.close(); |
| | | ins.close(); |
| | | return sp.getFullPath(); |
| | | } |
| | | |
| | | |
| | | /** |
| | | * 输出流转输入流 |
| | | * |
| | | * @param outs |
| | | * @return |
| | | * @throws Exception |
| | | */ |
| | | private InputStream out2In(ByteArrayOutputStream outs) throws Exception { |
| | | InputStream ins = new ByteArrayInputStream(outs.toByteArray()); |
| | | |
| | | return ins; |
| | | } |
| | | |
| | | |
| | | } |
| | | //package com.ycl.utils;
|
| | | //
|
| | | //
|
| | | //import com.github.tobato.fastdfs.domain.fdfs.StorePath;
|
| | | //import com.github.tobato.fastdfs.domain.upload.FastImageFile;
|
| | | //import com.github.tobato.fastdfs.service.FastFileStorageClient;
|
| | | //import com.ycl.dto.media.PictureZoomParameter;
|
| | | //import com.ycl.dto.media.Media;
|
| | | //import net.coobird.thumbnailator.Thumbnails;
|
| | | //import org.springframework.beans.factory.annotation.Autowired;
|
| | | //import org.springframework.beans.factory.annotation.Value;
|
| | | //import org.springframework.stereotype.Component;
|
| | | //import org.springframework.util.StringUtils;
|
| | | //import org.springframework.web.multipart.MultipartFile;
|
| | | //
|
| | | //import javax.annotation.PostConstruct;
|
| | | //import java.awt.image.BufferedImage;
|
| | | //import java.io.*;
|
| | | //import java.time.format.DateTimeFormatter;
|
| | | //import java.util.List;
|
| | | //import java.util.regex.Pattern;
|
| | | //
|
| | | //@Component
|
| | | //public class MediaFileUtil {
|
| | | //
|
| | | //
|
| | | // private static MediaFileUtil self;
|
| | | // @Value("${fdfs.groupName}")
|
| | | // private String groupName;
|
| | | //
|
| | | // @PostConstruct
|
| | | // private void init() {
|
| | | // self = this;
|
| | | // }
|
| | | //
|
| | | //
|
| | | // @Autowired
|
| | | // private FastFileStorageClient storageClient;
|
| | | //
|
| | | //
|
| | | // private static final Pattern videoPattern = Pattern.compile("((mp4|flv|avi|rm|rmvb|wmv)(jpg|png|gif|bmp))");
|
| | | //
|
| | | // @Value("${cfg.res}")
|
| | | // private String rootPath;
|
| | | //
|
| | | // private final DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern("yyyyMM");
|
| | | //
|
| | | //
|
| | | // public MediaFileUtil() throws IOException {
|
| | | //
|
| | | // }
|
| | | //
|
| | | //
|
| | | // public static String uploadImage(InputStream in) throws IOException {
|
| | | //
|
| | | // return self.storageClient.uploadImage(new FastImageFile(in, in.available(), "jpg", null)).getFullPath();
|
| | | // }
|
| | | //
|
| | | //
|
| | | // public static String uploadImage(File file) throws IOException {
|
| | | //
|
| | | // FileInputStream in = new FileInputStream(file);
|
| | | // return self.storageClient.uploadImage(new FastImageFile(in, in.available(), "jpg", null)).getFullPath();
|
| | | // }
|
| | | //
|
| | | //
|
| | | // /**
|
| | | // * 判断文件类型
|
| | | // *
|
| | | // * @param fileName
|
| | | // * @return
|
| | | // */
|
| | | // public Short getType(String fileName) {
|
| | | //
|
| | | // String ext = fileName.substring(fileName.lastIndexOf(".")).toLowerCase();
|
| | | //
|
| | | // if (".jpg".equals(ext) || ".jpeg".equals(ext) || ".png".equals(ext) || ".gif".equals(ext) || ".bmp".equals(ext)) {
|
| | | // return 1;
|
| | | // } else if (".mp4".equals(ext) || ".avi".equals(ext) || ".flv".equals(ext) || ".rm".equals(ext) || ".wmv".equals(ext)) {
|
| | | // return 2;
|
| | | // } else {
|
| | | // return 0;
|
| | | // }
|
| | | // }
|
| | | //
|
| | | // public Media save(MultipartFile file, PictureZoomParameter zoomPar) throws Exception {
|
| | | // String[] fs = file.getOriginalFilename().split("\\.");
|
| | | // String ext = fs[fs.length - 1];
|
| | | //
|
| | | // switch (this.getType(file.getOriginalFilename())) {
|
| | | // case 1:
|
| | | // return this.savePicture(file, ext, zoomPar);
|
| | | // case 2:
|
| | | // return this.saveVideo(file, ext);
|
| | | // default:
|
| | | // return new Media();
|
| | | // }
|
| | | // }
|
| | | //
|
| | | // public String savePicture(InputStream inputStream, String ext) throws Exception {
|
| | | // StorePath sp = storageClient.uploadFile(groupName, inputStream, inputStream.available(), ext);
|
| | | // return sp.getFullPath();
|
| | | // }
|
| | | //
|
| | | // public Media savePicture(MultipartFile file, String ext, PictureZoomParameter zoomPar) throws Exception {
|
| | | //
|
| | | // ByteArrayOutputStream outs = new ByteArrayOutputStream();
|
| | | // Media media = new Media();
|
| | | // media.setType(ext);
|
| | | // String path = null;
|
| | | // if (zoomPar.getWidth1() != null && zoomPar.getWidth1() > 0) {
|
| | | // path = this.thumbAndStorageOfFile(file, ext, zoomPar.getWidth1());
|
| | | // media.setUrl1(path);
|
| | | // }
|
| | | // if (zoomPar.getWidth2() != null && zoomPar.getWidth2() > 0) {
|
| | | // path = this.thumbAndStorageOfFile(file, ext, zoomPar.getWidth2());
|
| | | // media.setUrl2(path);
|
| | | // }
|
| | | // if (zoomPar.getWidth3() != null && zoomPar.getWidth3() > 0) {
|
| | | // path = this.thumbAndStorageOfFile(file, ext, zoomPar.getWidth3());
|
| | | // media.setUrl3(path);
|
| | | // }
|
| | | // // width4为原图
|
| | | // path = this.thumbAndStorageOfFile(file, ext, zoomPar.getWidth4());
|
| | | // media.setUrl4(path);
|
| | | // return media;
|
| | | // }
|
| | | //
|
| | | // /**
|
| | | // * 保存视频文件
|
| | | // *
|
| | | // * @param file
|
| | | // * @param ext
|
| | | // * @return
|
| | | // * @throws Exception
|
| | | // */
|
| | | // public Media saveVideo(MultipartFile file, String ext) throws Exception {
|
| | | //// StorePath sp = storageClient.uploadFile(file.getInputStream(), file.getSize(), ext, null);
|
| | | //
|
| | | // StorePath sp = storageClient.uploadFile(groupName, file.getInputStream(), file.getSize(), ext);
|
| | | // Media media = new Media();
|
| | | // media.setType(ext);
|
| | | // media.setUrl1(sp.getFullPath());
|
| | | // return media;
|
| | | // }
|
| | | //
|
| | | // /**
|
| | | // * 删除一个文件
|
| | | // *
|
| | | // * @param rootPath
|
| | | // */
|
| | | // public void removeFile(String rootPath) {
|
| | | // storageClient.deleteFile(rootPath);
|
| | | // }
|
| | | //
|
| | | // public void removeMedia(Media media) {
|
| | | // if (!StringUtils.isEmpty(media.getUrl1())) {
|
| | | // storageClient.deleteFile(media.getUrl1());
|
| | | // }
|
| | | // if (!StringUtils.isEmpty(media.getUrl2())) {
|
| | | // storageClient.deleteFile(media.getUrl2());
|
| | | // }
|
| | | // if (!StringUtils.isEmpty(media.getUrl3())) {
|
| | | // storageClient.deleteFile(media.getUrl3());
|
| | | // }
|
| | | // if (!StringUtils.isEmpty(media.getUrl4())) {
|
| | | // storageClient.deleteFile(media.getUrl4());
|
| | | // }
|
| | | // }
|
| | | //
|
| | | //
|
| | | // public void removeMedias(List<Media> medias) {
|
| | | // if (medias != null) {
|
| | | // for (Media m : medias) {
|
| | | // if (!StringUtils.isEmpty(m.getUrl1())) {
|
| | | // storageClient.deleteFile(m.getUrl1());
|
| | | // }
|
| | | // if (!StringUtils.isEmpty(m.getUrl2())) {
|
| | | // storageClient.deleteFile(m.getUrl2());
|
| | | // }
|
| | | // if (!StringUtils.isEmpty(m.getUrl3())) {
|
| | | // storageClient.deleteFile(m.getUrl3());
|
| | | // }
|
| | | // if (!StringUtils.isEmpty(m.getUrl4())) {
|
| | | // storageClient.deleteFile(m.getUrl4());
|
| | | // }
|
| | | // }
|
| | | // }
|
| | | //
|
| | | // }
|
| | | //
|
| | | // /**
|
| | | // * 判断文件是否存在
|
| | | // *
|
| | | // * @param url
|
| | | // * @return
|
| | | // */
|
| | | // public Boolean isEmpty(String url) {
|
| | | // return true;
|
| | | // }
|
| | | //
|
| | | // /**
|
| | | // * 缩放并且上传
|
| | | // *
|
| | | // * @param in
|
| | | // * @param ext
|
| | | // * @param width
|
| | | // * @return
|
| | | // * @throws Exception
|
| | | // */
|
| | | // private String thumbAndStorage(InputStream in, String ext, Integer width) throws Exception {
|
| | | //
|
| | | // Thumbnails.Builder fileBuilder = Thumbnails.of(in).scale(1.0).outputQuality(1.0);
|
| | | // BufferedImage src = fileBuilder.asBufferedImage();
|
| | | //
|
| | | // Integer w = src.getWidth(null);
|
| | | // Integer destWidth = width > w ? w : width;
|
| | | //
|
| | | // ByteArrayOutputStream bouts = new ByteArrayOutputStream();
|
| | | // Thumbnails.of(in).width(destWidth).toOutputStream(bouts);
|
| | | // InputStream ins = this.out2In(bouts);
|
| | | //
|
| | | // StorePath sp = storageClient.uploadFile(groupName, ins, bouts.size(), ext);
|
| | | //// StorePath sp = storageClient.uploadFile(ins, bouts.size(), ext, null);
|
| | | // bouts.close();
|
| | | // ins.close();
|
| | | // return sp.getFullPath();
|
| | | // }
|
| | | //
|
| | | // private String thumbAndStorageOfFile(MultipartFile file, String ext, Integer width) throws Exception {
|
| | | //
|
| | | // Thumbnails.Builder fileBuilder = Thumbnails.of(file.getInputStream()).scale(1.0).outputQuality(1.0);
|
| | | // BufferedImage src = fileBuilder.asBufferedImage();
|
| | | //
|
| | | // Integer w = src.getWidth(null);
|
| | | // Integer destWidth = width == null || width > w ? w : width;
|
| | | //
|
| | | // ByteArrayOutputStream bouts = new ByteArrayOutputStream();
|
| | | // Thumbnails.of(file.getInputStream()).width(destWidth).toOutputStream(bouts);
|
| | | // InputStream ins = this.out2In(bouts);
|
| | | // StorePath sp = storageClient.uploadFile(groupName, ins, bouts.size(), ext);
|
| | | //// StorePath sp = storageClient.uploadFile(ins, bouts.size(), ext, null);
|
| | | // bouts.close();
|
| | | // ins.close();
|
| | | // return sp.getFullPath();
|
| | | // }
|
| | | //
|
| | | //
|
| | | // /**
|
| | | // * 输出流转输入流
|
| | | // *
|
| | | // * @param outs
|
| | | // * @return
|
| | | // * @throws Exception
|
| | | // */
|
| | | // private InputStream out2In(ByteArrayOutputStream outs) throws Exception {
|
| | | // InputStream ins = new ByteArrayInputStream(outs.toByteArray());
|
| | | //
|
| | | // return ins;
|
| | | // }
|
| | | //
|
| | | //
|
| | | //}
|