Commit 2a329dd3 authored by liqin's avatar liqin 💬

bug fixed

parent 5ce9da30
...@@ -109,11 +109,6 @@ ...@@ -109,11 +109,6 @@
<version>1.2.75</version> <version>1.2.75</version>
</dependency> </dependency>
<!-- FastDFS --> <!-- FastDFS -->
<dependency>
<groupId>net.oschina.zcx7878</groupId>
<artifactId>fastdfs-client-java</artifactId>
<version>1.27.0.0</version>
</dependency>
<dependency> <dependency>
<groupId>com.github.tobato</groupId> <groupId>com.github.tobato</groupId>
<artifactId>fastdfs-client</artifactId> <artifactId>fastdfs-client</artifactId>
...@@ -159,7 +154,7 @@ ...@@ -159,7 +154,7 @@
<dependency> <dependency>
<groupId>com.github.xiaoymin</groupId> <groupId>com.github.xiaoymin</groupId>
<artifactId>knife4j-spring-boot-starter</artifactId> <artifactId>knife4j-spring-boot-starter</artifactId>
<version>2.0.4</version> <version>2.0.8</version>
<exclusions> <exclusions>
<exclusion> <exclusion>
<artifactId>guava</artifactId> <artifactId>guava</artifactId>
......
package cn.wisenergy.chnmuseum.party.common.dfs;
import com.github.tobato.fastdfs.domain.fdfs.StorePath;
import com.github.tobato.fastdfs.domain.fdfs.ThumbImageConfig;
import com.github.tobato.fastdfs.domain.proto.storage.DownloadByteArray;
import com.github.tobato.fastdfs.service.FastFileStorageClient;
import org.apache.commons.io.FilenameUtils;
import org.springframework.stereotype.Component;
import org.springframework.web.multipart.MultipartFile;
import javax.annotation.Resource;
import java.io.IOException;
@Component
public class FdfsUtil {
@Resource
private FastFileStorageClient fastFileStorageClient;
@Resource
private ThumbImageConfig thumbImageConfig;
/**
* 上传文件
*
* @param file 文件对象
* @return storePath 文件在服务器中的存储路径 group1/M00/00/08/rBEAA2A_Ci2AU9pHAAYlnPgRYiA554.jpg
* @throws IOException
*/
public String uploadFile(MultipartFile file) throws IOException {
// StorePath storePath = fastFileStorageClient.uploadFile("aifruit", //默认都是放在aifruit分组group
StorePath storePath = fastFileStorageClient.uploadFile(file.getInputStream(),
file.getSize(),
FilenameUtils.getExtension(file.getOriginalFilename()), null);
return storePath.getFullPath(); //返回完整的图片存放路径(含group)
}
/**
* 下载文件(文件字节)
*
* @param fileUrl 文件服务器存储路径 group1/M00/00/08/rBEAA2A_Ci2AU9pHAAYlnPgRYiA554.jpg
* @return byte[] 文件字节
* @throws IOException
*/
public byte[] downloadFileByByte(String fileUrl) {
String group = fileUrl.substring(0, fileUrl.indexOf("/"));
String path = fileUrl.substring(fileUrl.indexOf("/") + 1);
return fastFileStorageClient.downloadFile(group, path, new DownloadByteArray());
}
}
package cn.wisenergy.chnmuseum.party.common.dfs;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;
import java.util.Arrays;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;
import javax.imageio.ImageIO;
import javax.imageio.ImageReader;
import javax.imageio.stream.ImageInputStream;
import org.apache.commons.io.FilenameUtils;
import org.apache.commons.lang3.StringUtils;
public class FileTypeUtil {
private final static Map<String, String> FILE_TYPE_MAP = new HashMap<String, String>();
private final static List<String> imageAllowFiles = Arrays
.asList(new String[] { "png", "jpg", "jpeg", "gif", "bmp" });/* 允许上传的图片格式 */
static {
getAllFileType(); // 初始化文件类型信息
}
/**
* <p>
* Discription:[getAllFileType,常见文件头信息] 注:TXT文件没有文件头
* </p>
*/
private static void getAllFileType() {
FILE_TYPE_MAP.put("jpg", "FFD8FF"); // JPEG (jpg)
FILE_TYPE_MAP.put("png", "89504E47"); // PNG (png)
FILE_TYPE_MAP.put("gif", "47494638"); // GIF (gif)
FILE_TYPE_MAP.put("tif", "49492A00"); // TIFF (tif)
FILE_TYPE_MAP.put("bmp", "424D"); // Windows Bitmap (bmp)
FILE_TYPE_MAP.put("dwg", "41433130"); // CAD (dwg)
FILE_TYPE_MAP.put("html", "68746D6C3E"); // HTML (html)
FILE_TYPE_MAP.put("rtf", "7B5C727466"); // Rich Text Format (rtf)
FILE_TYPE_MAP.put("xml", "3C3F786D6C");
FILE_TYPE_MAP.put("zip", "504B0304");
FILE_TYPE_MAP.put("rar", "52617221");
FILE_TYPE_MAP.put("psd", "38425053"); // Photoshop (psd)
FILE_TYPE_MAP.put("eml", "44656C69766572792D646174653A"); // Email
// [thorough
// only]
// (eml)
FILE_TYPE_MAP.put("dbx", "CFAD12FEC5FD746F"); // Outlook Express (dbx)
FILE_TYPE_MAP.put("pst", "2142444E"); // Outlook (pst)
FILE_TYPE_MAP.put("xls", "D0CF11E0"); // MS Word
FILE_TYPE_MAP.put("doc", "D0CF11E0"); // MS Excel 注意:word 和 excel的文件头一样
FILE_TYPE_MAP.put("mdb", "5374616E64617264204A"); // MS Access (mdb)
FILE_TYPE_MAP.put("wpd", "FF575043"); // WordPerfect (wpd)
FILE_TYPE_MAP.put("eps", "252150532D41646F6265");
FILE_TYPE_MAP.put("ps", "252150532D41646F6265");
FILE_TYPE_MAP.put("pdf", "255044462D312E"); // Adobe Acrobat (pdf)
FILE_TYPE_MAP.put("qdf", "AC9EBD8F"); // Quicken (qdf)
FILE_TYPE_MAP.put("pwl", "E3828596"); // Windows Password (pwl)
FILE_TYPE_MAP.put("wav", "57415645"); // Wave (wav)
FILE_TYPE_MAP.put("avi", "41564920");
FILE_TYPE_MAP.put("ram", "2E7261FD"); // Real Audio (ram)
FILE_TYPE_MAP.put("rm", "2E524D46"); // Real Media (rm)
FILE_TYPE_MAP.put("mpg", "000001BA"); //
FILE_TYPE_MAP.put("mov", "6D6F6F76"); // Quicktime (mov)
FILE_TYPE_MAP.put("asf", "3026B2758E66CF11"); // Windows Media (asf)
FILE_TYPE_MAP.put("mid", "4D546864"); // MIDI (mid)
}
/**
* <p>
* Discription:[getFileTypeByStream]
* </p>
*/
public final static String getFileTypeByStream(byte[] b) {
String filetypeHex = String.valueOf(getFileHexString(b));
Iterator<Entry<String, String>> entryiterator = FILE_TYPE_MAP.entrySet().iterator();
while (entryiterator.hasNext()) {
Entry<String, String> entry = entryiterator.next();
String fileTypeHexValue = entry.getValue();
if (filetypeHex.toUpperCase().startsWith(fileTypeHexValue)) {
return entry.getKey();
}
}
return null;
}
/**
* <p>
* Discription:[getFileByFile,获取文件类型,包括图片,若格式不是已配置的,则返回null]
* </p>
*/
public final static String getFileTypeByFile(File file) {
String fileType = null;
byte[] b = new byte[50];
try {
InputStream is = new FileInputStream(file);
is.read(b);
fileType = getFileTypeByStream(b);
is.close();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
return fileType;
}
/**
* <p>
* Discription:[getFileHexString]
* </p>
*/
public final static String getFileHexString(byte[] b) {
StringBuilder stringBuilder = new StringBuilder();
if (b == null || b.length <= 0) {
return null;
}
for (int i = 0; i < b.length; i++) {
int v = b[i] & 0xFF;
String hv = Integer.toHexString(v);
if (hv.length() < 2) {
stringBuilder.append(0);
}
stringBuilder.append(hv);
}
return stringBuilder.toString();
}
/**
* <p>
* Discription:[getImageFileType,获取图片文件实际类型,若不是图片则返回null]
* </p>
*/
public final static String getImageFileType(File f) {
if (isImage(f)) {
try {
ImageInputStream iis = ImageIO.createImageInputStream(f);
Iterator<ImageReader> iter = ImageIO.getImageReaders(iis);
if (!iter.hasNext()) {
return null;
}
ImageReader reader = iter.next();
iis.close();
return reader.getFormatName();
} catch (IOException e) {
e.printStackTrace();
return null;
} catch (Exception e) {
e.printStackTrace();
return null;
}
}
return null;
}
/**
* 只根据后缀名判断是否为图片
*
* @param file
* @return
*/
public static final boolean isImage(File file) {
return isImage(file, true);
}
/**
* <p>
* Discription:[isImage,判断文件是否为图片]
* </p>
*
* @param file
* 源文件
* @param onlyByExtension
* 是否值验证后缀名
* @return true 是 | false 否
*/
public static final boolean isImage(File file, boolean onlyByExtension) {
boolean flag = false;
try {
boolean allowFile = isImageByExtension(file.getName());
if (onlyByExtension) {
flag = allowFile;
} else {
if (allowFile) {
BufferedImage bufreader = ImageIO.read(file);
int width = bufreader.getWidth();
int height = bufreader.getHeight();
if (width == 0 || height == 0) {
flag = false;
} else {
flag = true;
}
}
}
} catch (IOException e) {
flag = false;
e.printStackTrace();
} catch (Exception e) {
flag = false;
e.printStackTrace();
}
return flag;
}
/**
* 只通过后缀名判断是否为图片
*
* @param fileName
* @return
*/
public static final boolean isImageByExtension(String fileName) {
boolean flag = false;
String fileExtName = FilenameUtils.getExtension(fileName);
if (StringUtils.isNotBlank(fileExtName)) {
flag = imageAllowFiles.contains(fileExtName.toLowerCase());
}
return flag;
}
}
package cn.wisenergy.chnmuseum.party.common.dfs;
import cn.wisenergy.chnmuseum.party.common.exception.FdfsUnsupportStorePathException;
import org.apache.commons.lang3.Validate;
/**
* 存储文件的路径信息
*
* @author yuqih
*
*/
public class StorePath1 {
private String group;
private String path;
/** 解析路径 */
private static final String SPLIT_GROUP_NAME_AND_FILENAME_SEPERATOR = "/";
/** group */
private static final String SPLIT_GROUP_NAME = "group";
/**
* 存储文件路径
*/
public StorePath1() {
}
/**
* 存储文件路径
*
* @param group
* @param path
*/
public StorePath1(String group, String path) {
super();
this.group = group;
this.path = path;
}
/**
* @return the group
*/
public String getGroup() {
return group;
}
/**
* @param group
* the group to set
*/
public void setGroup(String group) {
this.group = group;
}
/**
* @return the path
*/
public String getPath() {
return path;
}
/**
* @param path
* the path to set
*/
public void setPath(String path) {
this.path = path;
}
/**
* 获取文件全路径
*
* @return
*/
public String getFullPath() {
return this.group.concat(SPLIT_GROUP_NAME_AND_FILENAME_SEPERATOR).concat(this.path);
}
/*
* (non-Javadoc)
*
* @see java.lang.Object#toString()
*/
@Override
public String toString() {
return "StorePath [group=" + group + ", path=" + path + "]";
}
/**
* 从Url当中解析存储路径对象
*
* @param filePath
* 有效的路径样式为(group/path) 或者 (http://ip/group/path),路径地址必须包含group
* @return
*/
public static StorePath1 praseFromUrl(String filePath) {
Validate.notNull(filePath, "解析文件路径不能为空");
// 获取group起始位置
int groupStartPos = getGroupStartPos(filePath);
String groupAndPath = filePath.substring(groupStartPos);
int pos = groupAndPath.indexOf(SPLIT_GROUP_NAME_AND_FILENAME_SEPERATOR);
if ((pos <= 0) || (pos == groupAndPath.length() - 1)) {
throw new FdfsUnsupportStorePathException("解析文件路径错误,有效的路径样式为(group/path) 而当前解析路径为".concat(filePath));
}
String group = groupAndPath.substring(0, pos);
String path = groupAndPath.substring(pos + 1);
return new StorePath1(group, path);
}
/**
* 获得group起始位置
*
* @param filePath
*/
private static int getGroupStartPos(String filePath) {
int pos = filePath.indexOf(SPLIT_GROUP_NAME);
if ((pos == -1)) {
throw new FdfsUnsupportStorePathException("解析文件路径错误,被解析路径url没有group,当前解析路径为".concat(filePath));
}
return pos;
}
}
\ No newline at end of file
...@@ -11,7 +11,7 @@ import com.baomidou.mybatisplus.extension.injector.methods.LogicDeleteByIdWithFi ...@@ -11,7 +11,7 @@ import com.baomidou.mybatisplus.extension.injector.methods.LogicDeleteByIdWithFi
import java.util.List; import java.util.List;
/** /**
* @author DannyLee * @author Danny Lee
* @description 自定义sql注入器· * @description 自定义sql注入器·
* @date Created in 2020/3/6 16:10 * @date Created in 2020/3/6 16:10
*/ */
......
package cn.wisenergy.chnmuseum.party.common.util;
import org.apache.commons.io.FilenameUtils;
import org.apache.commons.lang3.StringUtils;
import javax.imageio.ImageIO;
import javax.imageio.ImageReader;
import javax.imageio.stream.ImageInputStream;
import java.awt.image.BufferedImage;
import java.io.*;
import java.util.*;
import java.util.Map.Entry;
public class FileTypeUtil {
private static final Map<String, String> FILE_TYPE_MAP = new HashMap<>();
private static final List<String> imageAllowFiles = Arrays.asList("png", "jpg", "jpeg", "gif", "bmp");/* 允许上传的图片格式 */
static {
getAllFileType(); // 初始化文件类型信息
}
/**
* <p>
* Discription:[getAllFileType,常见文件头信息] 注:TXT文件没有文件头
* </p>
*/
private static void getAllFileType() {
FILE_TYPE_MAP.put("jpg", "FFD8FF"); // JPEG (jpg)
FILE_TYPE_MAP.put("png", "89504E47"); // PNG (png)
FILE_TYPE_MAP.put("gif", "47494638"); // GIF (gif)
FILE_TYPE_MAP.put("tif", "49492A00"); // TIFF (tif)
FILE_TYPE_MAP.put("bmp", "424D"); // Windows Bitmap (bmp)
FILE_TYPE_MAP.put("dwg", "41433130"); // CAD (dwg)
FILE_TYPE_MAP.put("html", "68746D6C3E"); // HTML (html)
FILE_TYPE_MAP.put("rtf", "7B5C727466"); // Rich Text Format (rtf)
FILE_TYPE_MAP.put("xml", "3C3F786D6C");
FILE_TYPE_MAP.put("zip", "504B0304");
FILE_TYPE_MAP.put("rar", "52617221");
FILE_TYPE_MAP.put("psd", "38425053"); // Photoshop (psd)
FILE_TYPE_MAP.put("eml", "44656C69766572792D646174653A"); // Email
// [thorough
// only]
// (eml)
FILE_TYPE_MAP.put("dbx", "CFAD12FEC5FD746F"); // Outlook Express (dbx)
FILE_TYPE_MAP.put("pst", "2142444E"); // Outlook (pst)
FILE_TYPE_MAP.put("xls", "D0CF11E0"); // MS Word
FILE_TYPE_MAP.put("doc", "D0CF11E0"); // MS Excel 注意:word 和 excel的文件头一样
FILE_TYPE_MAP.put("mdb", "5374616E64617264204A"); // MS Access (mdb)
FILE_TYPE_MAP.put("wpd", "FF575043"); // WordPerfect (wpd)
FILE_TYPE_MAP.put("eps", "252150532D41646F6265");
FILE_TYPE_MAP.put("ps", "252150532D41646F6265");
FILE_TYPE_MAP.put("pdf", "255044462D312E"); // Adobe Acrobat (pdf)
FILE_TYPE_MAP.put("qdf", "AC9EBD8F"); // Quicken (qdf)
FILE_TYPE_MAP.put("pwl", "E3828596"); // Windows Password (pwl)
FILE_TYPE_MAP.put("wav", "57415645"); // Wave (wav)
FILE_TYPE_MAP.put("avi", "41564920");
FILE_TYPE_MAP.put("ram", "2E7261FD"); // Real Audio (ram)
FILE_TYPE_MAP.put("rm", "2E524D46"); // Real Media (rm)
FILE_TYPE_MAP.put("mpg", "000001BA"); //
FILE_TYPE_MAP.put("mov", "6D6F6F76"); // Quicktime (mov)
FILE_TYPE_MAP.put("asf", "3026B2758E66CF11"); // Windows Media (asf)
FILE_TYPE_MAP.put("mid", "4D546864"); // MIDI (mid)
}
/**
* <p>
* Discription:[getFileTypeByStream]
* </p>
*/
public final static String getFileTypeByStream(byte[] b) {
String filetypeHex = String.valueOf(getFileHexString(b));
Iterator<Entry<String, String>> entryiterator = FILE_TYPE_MAP.entrySet().iterator();
while (entryiterator.hasNext()) {
Entry<String, String> entry = entryiterator.next();
String fileTypeHexValue = entry.getValue();
if (filetypeHex.toUpperCase().startsWith(fileTypeHexValue)) {
return entry.getKey();
}
}
return null;
}
/**
* <p>
* Discription:[getFileByFile,获取文件类型,包括图片,若格式不是已配置的,则返回null]
* </p>
*/
public final static String getFileTypeByFile(File file) {
String fileType = null;
byte[] b = new byte[50];
try {
InputStream is = new FileInputStream(file);
is.read(b);
fileType = getFileTypeByStream(b);
is.close();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
return fileType;
}
/**
* <p>
* Discription:[getFileHexString]
* </p>
*/
public final static String getFileHexString(byte[] b) {
StringBuilder stringBuilder = new StringBuilder();
if (b == null || b.length <= 0) {
return null;
}
for (int i = 0; i < b.length; i++) {
int v = b[i] & 0xFF;
String hv = Integer.toHexString(v);
if (hv.length() < 2) {
stringBuilder.append(0);
}
stringBuilder.append(hv);
}
return stringBuilder.toString();
}
/**
* <p>
* Discription:[getImageFileType,获取图片文件实际类型,若不是图片则返回null]
* </p>
*/
public final static String getImageFileType(File f) {
if (isImage(f)) {
try {
ImageInputStream iis = ImageIO.createImageInputStream(f);
Iterator<ImageReader> iter = ImageIO.getImageReaders(iis);
if (!iter.hasNext()) {
return null;
}
ImageReader reader = iter.next();
iis.close();
return reader.getFormatName();
} catch (IOException e) {
e.printStackTrace();
return null;
} catch (Exception e) {
e.printStackTrace();
return null;
}
}
return null;
}
/**
* 只根据后缀名判断是否为图片
*
* @param file
* @return
*/
public static final boolean isImage(File file) {
return isImage(file, true);
}
/**
* <p>
* Discription:[isImage,判断文件是否为图片]
* </p>
*
* @param file 源文件
* @param onlyByExtension 是否值验证后缀名
* @return true 是 | false 否
*/
public static final boolean isImage(File file, boolean onlyByExtension) {
boolean flag = false;
try {
boolean allowFile = isImageByExtension(file.getName());
if (onlyByExtension) {
flag = allowFile;
} else {
if (allowFile) {
BufferedImage bufreader = ImageIO.read(file);
int width = bufreader.getWidth();
int height = bufreader.getHeight();
if (width == 0 || height == 0) {
flag = false;
} else {
flag = true;
}
}
}
} catch (IOException e) {
flag = false;
e.printStackTrace();
} catch (Exception e) {
flag = false;
e.printStackTrace();
}
return flag;
}
/**
* 只通过后缀名判断是否为图片
*
* @param fileName
* @return
*/
public static final boolean isImageByExtension(String fileName) {
boolean flag = false;
String fileExtName = FilenameUtils.getExtension(fileName);
if (StringUtils.isNotBlank(fileExtName)) {
flag = imageAllowFiles.contains(fileExtName.toLowerCase());
}
return flag;
}
}
package cn.wisenergy.chnmuseum.party.common.dfs; package cn.wisenergy.chnmuseum.party.common.util;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.io.File; import java.io.File;
import java.io.FileInputStream; import java.io.FileInputStream;
...@@ -7,9 +10,6 @@ import java.io.IOException; ...@@ -7,9 +10,6 @@ import java.io.IOException;
import java.net.FileNameMap; import java.net.FileNameMap;
import java.net.URLConnection; import java.net.URLConnection;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
public class FileUtil { public class FileUtil {
private static final Logger logger = LoggerFactory.getLogger(FileUtil.class); private static final Logger logger = LoggerFactory.getLogger(FileUtil.class);
......
package cn.wisenergy.chnmuseum.party.service.impl; package cn.wisenergy.chnmuseum.party.service.impl;
import cn.wisenergy.chnmuseum.party.common.dfs.FastDFSUtils;
import com.baidu.ueditor.define.AppInfo; import com.baidu.ueditor.define.AppInfo;
import com.baidu.ueditor.define.BaseState; import com.baidu.ueditor.define.BaseState;
import com.baidu.ueditor.define.MultiState; import com.baidu.ueditor.define.MultiState;
import com.baidu.ueditor.define.State; import com.baidu.ueditor.define.State;
import com.baidu.ueditor.extend.UeditorService; import com.baidu.ueditor.extend.UeditorService;
import cn.wisenergy.chnmuseum.party.common.dfs.FastDFSUtils;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.springframework.web.multipart.MultipartFile; import org.springframework.web.multipart.MultipartFile;
import org.springframework.web.multipart.MultipartHttpServletRequest; import org.springframework.web.multipart.MultipartHttpServletRequest;
import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletRequest;
import java.io.ByteArrayInputStream;
import java.io.IOException; import java.io.IOException;
import java.io.InputStream;
import java.util.Map; import java.util.Map;
/** /**
* UeditorService实现 - Fastdfs * UeditorService的FastDFS实现
*/ */
@Service @Service
@ConfigurationProperties
public class UeditorServiceFastdfsImpl implements UeditorService { public class UeditorServiceFastdfsImpl implements UeditorService {
@Value("${dfsFileAccessBasePath}")
private String dfsFileAccessBasePath;
@Override @Override
public com.baidu.ueditor.extend.MultipartFile getMultipartFile(String filedName, HttpServletRequest request) { public com.baidu.ueditor.extend.MultipartFile getMultipartFile(String filedName, HttpServletRequest request) {
com.baidu.ueditor.extend.MultipartFile resultFile = null; com.baidu.ueditor.extend.MultipartFile resultFile = null;
try { try {
MultipartHttpServletRequest multipartHttpservletRequest = (MultipartHttpServletRequest) request; MultipartHttpServletRequest multipartHttpservletRequest = (MultipartHttpServletRequest) request;
MultipartFile multipartFile = multipartHttpservletRequest.getFile(filedName); MultipartFile multipartFile = multipartHttpservletRequest.getFile(filedName);
if (!multipartFile.isEmpty()) { if (multipartFile != null && !multipartFile.isEmpty()) {
resultFile = new com.baidu.ueditor.extend.StandardMultipartFile(filedName, multipartFile.getInputStream(), resultFile = new com.baidu.ueditor.extend.StandardMultipartFile(filedName, multipartFile.getInputStream(),
multipartFile.getOriginalFilename(), multipartFile.getSize()); multipartFile.getOriginalFilename(), multipartFile.getSize());
} }
...@@ -44,58 +40,56 @@ public class UeditorServiceFastdfsImpl implements UeditorService { ...@@ -44,58 +40,56 @@ public class UeditorServiceFastdfsImpl implements UeditorService {
@Override @Override
public State saveFileByInputStream(com.baidu.ueditor.extend.MultipartFile multipartFile, long maxSize) { public State saveFileByInputStream(com.baidu.ueditor.extend.MultipartFile multipartFile, long maxSize) {
State state = null; State state;
try { try {
if (multipartFile.getSize() > maxSize) { if (multipartFile.getSize() > maxSize) {
return new BaseState(false, AppInfo.MAX_SIZE); return new BaseState(false, AppInfo.MAX_SIZE);
} }
Map<String, Object> uploadResult;
Map<String, Object> uploadResult = null;
String originalFileName = multipartFile.getOriginalFilename(); String originalFileName = multipartFile.getOriginalFilename();
uploadResult = FastDFSUtils.uploadFile(multipartFile.getBytes(), originalFileName); uploadResult = FastDFSUtils.uploadImage(multipartFile.getInputStream(), multipartFile.getSize(), originalFileName);
if ((Boolean) uploadResult.get("status")) {
// // 文件新路径 state = new BaseState(true);
// uploadResult = FastdfsUtil.uploadPic(multipartFile.getBytes(), multipartFile.getOriginalFilename(), state.putInfo("size", uploadResult.get("size").toString());
// multipartFile.getSize()); state.putInfo("title", uploadResult.get("title").toString());
state.putInfo("url", uploadResult.get("url").toString());
return state;
}
} catch (Exception e) {
e.printStackTrace();
}
return new BaseState(false, AppInfo.IO_ERROR);
}
@Override
public State saveBinaryFile(InputStream inputStream, long fileSize, String fileName) {
State state;
Map<String, Object> uploadResult = FastDFSUtils.uploadImage(inputStream, fileSize, fileName);
if ((Boolean) uploadResult.get("status")) { if ((Boolean) uploadResult.get("status")) {
state = new BaseState(true); state = new BaseState(true);
state.putInfo("size", uploadResult.get("length").toString()); state.putInfo("size", uploadResult.get("size").toString());
state.putInfo("title", uploadResult.get("fileName").toString()); state.putInfo("title", uploadResult.get("title").toString());
// state.putInfo("groupName", state.putInfo("url", uploadResult.get("url").toString());
// uploadResult.get("groupName").toString());
// state.putInfo("storageFileName",
// uploadResult.get("storageFileName").toString());
state.putInfo("url", dfsFileAccessBasePath + "/" + uploadResult.get("link").toString());
// 把上传的文件信息记入数据库 // 把上传的文件信息记入数据库
// ---自行处理---
return state; return state;
} }
} catch (IOException e) {
}
return new BaseState(false, AppInfo.IO_ERROR); return new BaseState(false, AppInfo.IO_ERROR);
} }
@Override @Override
public State saveBinaryFile(byte[] data, String fileName) { public State saveBinaryFile(byte[] data, String fileName) {
State state = null; State state;
Map<String, Object> uploadResult = FastDFSUtils.uploadFile(data, fileName); ByteArrayInputStream baos = new ByteArrayInputStream(data);
Map<String, Object> uploadResult = FastDFSUtils.uploadImage(baos, 0L, fileName);
if ((Boolean) uploadResult.get("status")) { if ((Boolean) uploadResult.get("status")) {
state = new BaseState(true); state = new BaseState(true);
state.putInfo("size", uploadResult.get("length").toString()); state.putInfo("size", uploadResult.get("size").toString());
state.putInfo("title", uploadResult.get("fileName").toString()); state.putInfo("title", uploadResult.get("title").toString());
// state.putInfo("groupName", state.putInfo("url", uploadResult.get("url").toString());
// uploadResult.get("groupName").toString());
// state.putInfo("storageFileName",
// uploadResult.get("storageFileName").toString());
state.putInfo("url", dfsFileAccessBasePath + "/" + uploadResult.get("link").toString());
// 把上传的文件信息记入数据库 // 把上传的文件信息记入数据库
// ---自行处理---
return state; return state;
} }
......
...@@ -80,7 +80,7 @@ public class AssetController extends BaseController { ...@@ -80,7 +80,7 @@ public class AssetController extends BaseController {
for (MultipartFile file : files) { for (MultipartFile file : files) {
// 原始文件名 // 原始文件名
String originalFilename = file.getOriginalFilename(); String originalFilename = file.getOriginalFilename();
String url = FastDFSUtils.uploadInputStream(file.getInputStream(), originalFilename, file.getSize()); String url = FastDFSUtils.uploadFile(file.getInputStream(), file.getSize(), originalFilename);
filesMetadata.add(AssetVo.builder().fileName(originalFilename).fileExt(FilenameUtils.getExtension(originalFilename)) filesMetadata.add(AssetVo.builder().fileName(originalFilename).fileExt(FilenameUtils.getExtension(originalFilename))
.fileSize(file.getSize()).fileUrl(url).build()); .fileSize(file.getSize()).fileUrl(url).build());
} }
...@@ -106,7 +106,7 @@ public class AssetController extends BaseController { ...@@ -106,7 +106,7 @@ public class AssetController extends BaseController {
for (MultipartFile file : files) { for (MultipartFile file : files) {
// 上传简单文件名 // 上传简单文件名
String originalFilename = file.getOriginalFilename(); String originalFilename = file.getOriginalFilename();
String url = FastDFSUtils.uploadInputStream(file.getInputStream(), originalFilename, file.getSize()); String url = FastDFSUtils.uploadFile(file.getInputStream(), file.getSize(), originalFilename);
filesMetadata.put(originalFilename.trim(), url); filesMetadata.put(originalFilename.trim(), url);
} }
asset.setAuditStatus(AuditStatusEnum.TBC.name()); asset.setAuditStatus(AuditStatusEnum.TBC.name());
......
...@@ -4,7 +4,6 @@ import cn.wisenergy.chnmuseum.party.common.dfs.FastDFSUtils; ...@@ -4,7 +4,6 @@ import cn.wisenergy.chnmuseum.party.common.dfs.FastDFSUtils;
import cn.wisenergy.chnmuseum.party.common.vo.PicUploadResult; import cn.wisenergy.chnmuseum.party.common.vo.PicUploadResult;
import org.slf4j.Logger; import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.http.HttpStatus; import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity; import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMapping;
...@@ -13,8 +12,6 @@ import org.springframework.web.bind.annotation.RequestParam; ...@@ -13,8 +12,6 @@ import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController; import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.multipart.MultipartFile; import org.springframework.web.multipart.MultipartFile;
import javax.servlet.http.HttpServletResponse;
/** /**
* 图片上传 * 图片上传
*/ */
...@@ -23,8 +20,6 @@ import javax.servlet.http.HttpServletResponse; ...@@ -23,8 +20,6 @@ import javax.servlet.http.HttpServletResponse;
public class PicUploadController { public class PicUploadController {
private static final Logger log = LoggerFactory.getLogger(PicUploadController.class); private static final Logger log = LoggerFactory.getLogger(PicUploadController.class);
@Value("${IMAGE_BASE_URL}")
private String IMAGE_BASE_URL;
// 允许上传的格式 // 允许上传的格式
private static final String[] IMAGE_TYPE = new String[]{".bmp", ".jpg", ".jpeg", ".png"}; private static final String[] IMAGE_TYPE = new String[]{".bmp", ".jpg", ".jpeg", ".png"};
...@@ -80,23 +75,13 @@ public class PicUploadController { ...@@ -80,23 +75,13 @@ public class PicUploadController {
// } // }
@RequestMapping(value = "/upload", method = RequestMethod.POST) @RequestMapping(value = "/upload", method = RequestMethod.POST)
public ResponseEntity<PicUploadResult> uploadFile(@RequestParam(value = "cover") MultipartFile uploadFile, HttpServletResponse response) throws Exception { public ResponseEntity<PicUploadResult> uploadFile(@RequestParam(value = "cover") MultipartFile uploadFile) throws Exception {
// 封装Result对象,并且将文件的byte数组放置到result对象中
PicUploadResult fileUploadResult = new PicUploadResult(); PicUploadResult fileUploadResult = new PicUploadResult();
if (uploadFile.getSize() / (1024 * 1024) > 1024) { String filePath = FastDFSUtils.uploadFile(uploadFile.getInputStream(), uploadFile.getSize(), uploadFile.getOriginalFilename());
//50兆
log.error("附件大小超过50兆!请重新上传 ");
return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).body(null);
}
;
// 文件新路径
String filePath = FastDFSUtils.uploadPic(uploadFile.getBytes(), uploadFile.getOriginalFilename(),
uploadFile.getSize());
if (log.isDebugEnabled()) { if (log.isDebugEnabled()) {
log.debug("Pic file upload .[{}] to [{}] .", uploadFile.getOriginalFilename(), filePath); log.debug("Pic file upload .[{}] to [{}] .", uploadFile.getOriginalFilename(), filePath);
} }
String picUrl = IMAGE_BASE_URL + filePath; fileUploadResult.setUrl(filePath);
fileUploadResult.setUrl(picUrl);
return ResponseEntity.status(HttpStatus.CREATED).body(fileUploadResult); return ResponseEntity.status(HttpStatus.CREATED).body(fileUploadResult);
} }
......
...@@ -31,6 +31,7 @@ public class BaseState implements State { ...@@ -31,6 +31,7 @@ public class BaseState implements State {
this.info = AppInfo.getStateInfo( infoCode ); this.info = AppInfo.getStateInfo( infoCode );
} }
@Override
public boolean isSuccess () { public boolean isSuccess () {
return this.state; return this.state;
} }
......
package com.baidu.ueditor.extend; package com.baidu.ueditor.extend;
import com.baidu.ueditor.define.*;
import org.json.JSONObject;
import java.io.ByteArrayOutputStream; import java.io.ByteArrayOutputStream;
import java.io.IOException; import java.io.IOException;
import java.io.InputStream; import java.io.InputStream;
...@@ -9,14 +12,6 @@ import java.util.Arrays; ...@@ -9,14 +12,6 @@ import java.util.Arrays;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
import org.json.JSONObject;
import com.baidu.ueditor.define.AppInfo;
import com.baidu.ueditor.define.BaseState;
import com.baidu.ueditor.define.MIMEType;
import com.baidu.ueditor.define.MultiState;
import com.baidu.ueditor.define.State;
/** /**
* 图片抓取器 * 图片抓取器
* *
...@@ -67,9 +62,11 @@ public class UEImageHunter { ...@@ -67,9 +62,11 @@ public class UEImageHunter {
} }
connection = (HttpURLConnection) url.openConnection(); connection = (HttpURLConnection) url.openConnection();
connection.setInstanceFollowRedirects(true); connection.setInstanceFollowRedirects(true);
connection.setUseCaches(true); connection.setUseCaches(true);
connection.setRequestProperty("User-Agent", "Mozilla/5.0 (Windows 7; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/47.0.2526.73 Safari/537.36 YNoteCef/5.8.0.1 (Windows)");
connection.setRequestProperty("Accept-Encoding", "gzip,deflate,identity");
//connection.setRequestProperty("Range", "bytes=0-1");
if (!validContentState(connection.getResponseCode())) { if (!validContentState(connection.getResponseCode())) {
return new BaseState(false, AppInfo.CONNECTION_ERROR); return new BaseState(false, AppInfo.CONNECTION_ERROR);
...@@ -89,8 +86,9 @@ public class UEImageHunter { ...@@ -89,8 +86,9 @@ public class UEImageHunter {
urlStr = urlStr.substring(0, urlStr.indexOf("?")); urlStr = urlStr.substring(0, urlStr.indexOf("?"));
} }
String fileName = urlStr.substring(urlStr.lastIndexOf("/") + 1); String fileName = urlStr.substring(urlStr.lastIndexOf("/") + 1);
long contentLengthLong = connection.getContentLengthLong();
State state = this.ueditorService.saveBinaryFile(getBytes(connection.getInputStream()), fileName); State state = this.ueditorService.saveBinaryFile(connection.getInputStream(), contentLengthLong, fileName);
if (state.isSuccess()) { if (state.isSuccess()) {
JSONObject jsonObj = new JSONObject(state.toJSONString()); JSONObject jsonObj = new JSONObject(state.toJSONString());
......
package com.baidu.ueditor.extend; package com.baidu.ueditor.extend;
import javax.servlet.http.HttpServletRequest;
import com.baidu.ueditor.define.State; import com.baidu.ueditor.define.State;
import javax.servlet.http.HttpServletRequest;
import java.io.InputStream;
public interface UeditorService { public interface UeditorService {
/** /**
...@@ -25,6 +26,8 @@ public interface UeditorService { ...@@ -25,6 +26,8 @@ public interface UeditorService {
*/ */
public State saveFileByInputStream(MultipartFile multipartFile, long maxSize); public State saveFileByInputStream(MultipartFile multipartFile, long maxSize);
public State saveBinaryFile(InputStream inputStream, long fileSize, String fileName);
/** /**
* 存储文件 * 存储文件
* *
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment