当前位置:网站首页>CKEditor 4.10.1 上传图片提示“不正确的服务器响应” 问题解决
CKEditor 4.10.1 上传图片提示“不正确的服务器响应” 问题解决
2022-07-02 06:34:00 【niceyz】
最近项目采用CKEditor 4 富文本编辑器,上传图片时提示"不正确的服务器响应" , 查看官方文档要求返回json格式,官方示例:
Response: File Uploaded Successfully
上传成功返回:
{
"uploaded": 1,
"fileName": "foo.jpg",
"url": "/files/foo.jpg"
}
{
"uploaded": 1,
"fileName": "foo(2).jpg",
"url": "/files/foo(2).jpg",
"error": {
"message": "A file with the same name already exists. The uploaded file was renamed to \"foo(2).jpg\"."
}
}
Response: File Could Not Be Uploaded
上传失败返回:
{
"uploaded": 0,
"error": {
"message": "The file is too big."
}
}
地址:https://ckeditor.com/docs/ckeditor4/latest/guide/dev_file_upload.html
封装返回代码:
import java.util.HashMap;
import java.util.Map;
/**
* @description: CKEditor编辑器上传图片返回格式
* @author: yz
* @create: 2018/8/16 18:31
*/
public class FileResponse extends HashMap<String, Object> {
Map<String,Object> msgMap = new HashMap<>();
public String error(int code, String msg){
FileResponse result = new FileResponse();
msgMap.put("message",msg);
result.put("uploaded",code);
result.put("error",msgMap);
return JSONUtils.beanToJson(result);
}
public String success(int code, String fileName,String url,String msg){
FileResponse result = new FileResponse();
if(!StringUtils.isEmpty(msg)){
msgMap.put("message",msg);
result.put("error",msgMap);
}
result.put("uploaded",code);
result.put("fileName",fileName);
result.put("url",url);
return JSONUtils.beanToJson(result);
}
}上传代码:
import com.yz.common.utils.FileResponse;
import com.yz.common.utils.FileUtil;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.multipart.MultipartFile;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.PrintWriter;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.Date;
/**
* @description: 图片上传
* @author: yz
* @create: 2018/8/16 11:09
*/
@Controller
@RequestMapping("/common")
public class FileUploadController {
/*
* 图片命名格式
*/
private static final String DEFAULT_SUB_FOLDER_FORMAT_AUTO = "yyyyMMddHHmmss";
private final Logger logger = LoggerFactory.getLogger(this.getClass());
/*
* 上传图片文件夹
*/
private static final String UPLOAD_PATH = "/upload/yzimg/";
/*
* 上传图片
*/
@RequestMapping("/uploadImg")
public void uplodaImg(@RequestParam("upload") MultipartFile file,HttpServletRequest request,HttpServletResponse response) {
FileResponse fileResponse = new FileResponse();
try {
PrintWriter out = response.getWriter();
logger.info("fileSize: "+file.getSize());
// 图片大小不超过500K
if (file.getSize() > 1024*500) {
String error = fileResponse.error(0, "图片大小超过500K");
out.println(error);
return;
}
String proPath = request.getSession().getServletContext().getRealPath("/");
String proName = request.getContextPath();
String path = proPath + UPLOAD_PATH;
String fileName = file.getOriginalFilename();
String uploadContentType = file.getContentType();
String expandedName = "";
if (uploadContentType.equals("image/pjpeg") || uploadContentType.equals("image/jpeg")) {
expandedName = ".jpg";
} else if (uploadContentType.equals("image/png") || uploadContentType.equals("image/x-png")) {
expandedName = ".png";
} else if (uploadContentType.equals("image/gif")) {
expandedName = ".gif";
} else if (uploadContentType.equals("image/bmp")) {
expandedName = ".bmp";
} else {
String error = fileResponse.error(0, "文件格式不正确(必须为.jpg/.gif/.bmp/.png文件)");
out.println(error);
return;
}
DateFormat df = new SimpleDateFormat(DEFAULT_SUB_FOLDER_FORMAT_AUTO);
fileName = df.format(new Date()) + expandedName;
FileUtil.uploadFile(file.getBytes(), path, fileName);
String success = fileResponse.success(1, fileName, proName + "/upload/hximg/" + fileName, null);
out.println(success);
return;
} catch (Exception e) {
e.printStackTrace();
String error = fileResponse.error(0, "系统异常");
try {
response.getWriter().println(error);
return;
} catch (IOException e1) {
e1.printStackTrace();
}
}
}
}import java.io.File;
import java.io.FileOutputStream;
import java.util.UUID;
public class FileUtil {
public static void uploadFile(byte[] file, String filePath, String fileName) throws Exception {
File targetFile = new File(filePath);
if (!targetFile.exists()) {
targetFile.mkdirs();
}
FileOutputStream out = new FileOutputStream(filePath + fileName);
out.write(file);
out.flush();
out.close();
}
public static boolean deleteFile(String fileName) {
File file = new File(fileName);
// 如果文件路径所对应的文件存在,并且是一个文件,则直接删除
if (file.exists() && file.isFile()) {
if (file.delete()) {
return true;
} else {
return false;
}
} else {
return false;
}
}
public static String renameToUUID(String fileName) {
return UUID.randomUUID() + "." + fileName.substring(fileName.lastIndexOf(".") + 1);
}
}边栏推荐
- Matplotlib剑客行——初相识Matplotlib
- MySQL multi column in operation
- Discussion on improving development quality and reducing test bug rate
- Say goodbye to 996. What are the necessary plug-ins in idea?
- 分布式锁的这三种实现方式,如何在效率和正确性之间选择?
- From concept to method, the statistical learning method -- Chapter 3, k-nearest neighbor method
- Jd.com interviewer asked: what is the difference between using on or where in the left join association table and conditions
- Who is better for Beijing software development? How to find someone to develop system software
- C4D quick start tutorial - C4d mapping
- 洞见云原生|微服务及微服务架构浅析
猜你喜欢

Elastic Stack之Beats(Filebeat、Metricbeat)、Kibana、Logstash教程

【Go实战基础】gin 高效神器,如何将参数绑定到结构体

I've taken it. MySQL table 500W rows, but someone doesn't partition it?

【Go实战基础】gin 如何验证请求参数

In depth analysis of how the JVM executes Hello World

Chrome browser tag management plug-in – onetab

【Go实战基础】gin 如何自定义和使用一个中间件

聊聊消息队列高性能的秘密——零拷贝技术

Number structure (C language -- code with comments) -- Chapter 2, linear table (updated version)

【Go实战基础】gin 如何设置路由
随机推荐
Attributes of classfile
京东面试官问:LEFT JOIN关联表中用ON还是WHERE跟条件有什么区别
Pdf document of distributed service architecture: principle + Design + practice, (collect and see again)
Statistical learning methods - Chapter 5, decision tree model and learning (Part 1)
盘点典型错误之TypeError: X() got multiple values for argument ‘Y‘
Matplotlib剑客行——容纳百川的艺术家教程
长篇总结(代码有注释)数构(C语言)——第四章、串(上)
微服务实战|Eureka注册中心及集群搭建
机器学习实战:《美人鱼》属于爱情片还是动作片?KNN揭晓答案
In depth analysis of how the JVM executes Hello World
Chrome browser plug-in fatkun installation and introduction
别找了,Chrome浏览器必装插件都在这了
During MySQL installation, mysqld Exe reports that the application cannot start normally (0xc000007b)`
一篇详解带你再次重现《统计学习方法》——第二章、感知机模型
Troubleshooting and handling of an online problem caused by redis zadd
Microservice practice | load balancing component and source code analysis
Cartoon rendering - average normal stroke
微服务实战|熔断器Hystrix初体验
Talk about the secret of high performance of message queue -- zero copy technology
Cloudreve自建云盘实践,我说了没人能限制得了我的容量和速度