当前位置:网站首页>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);
}
}边栏推荐
- Redis安装部署(Windows/Linux)
- Redis zadd导致的一次线上问题排查和处理
- Cloudreve自建云盘实践,我说了没人能限制得了我的容量和速度
- Say goodbye to 996. What are the necessary plug-ins in idea?
- Matplotlib swordsman line - first acquaintance with Matplotlib
- 《统计学习方法》——第五章、决策树模型与学习(上)
- Cartoon rendering - average normal stroke
- MySQL multi column in operation
- Jingdong senior engineer has developed for ten years and compiled "core technology of 100 million traffic website architecture"
- Redis sorted set data type API and application scenario analysis
猜你喜欢

Chrome浏览器标签管理插件–OneTab

企业级SaaS CRM实现

以字节跳动内部 Data Catalog 架构升级为例聊业务系统的性能优化

Talk about the secret of high performance of message queue -- zero copy technology

《统计学习方法》——第五章、决策树模型与学习(上)
![[go practical basis] gin efficient artifact, how to bind parameters to structures](/img/c4/44b3bda826bd20757cc5afcc5d26a9.png)
[go practical basis] gin efficient artifact, how to bind parameters to structures

查看was发布的应用程序的端口

The channel cannot be viewed when the queue manager is running

Matplotlib swordsman line - layout guide and multi map implementation (Updated)

Number structure (C language) -- Chapter 4, compressed storage of matrices (Part 2)
随机推荐
长篇总结(代码有注释)数构(C语言)——第四章、串(上)
Micro service practice | introduction and practice of zuul, a micro service gateway
Solutions to Chinese garbled code in CMD window
Demand delineation executive summary
During MySQL installation, mysqld Exe reports that the application cannot start normally (0xc000007b)`
Cartoon rendering - average normal stroke
Matplotlib swordsman Tour - an artist tutorial to accommodate all rivers
知识点很细(代码有注释)数构(C语言)——第三章、栈和队列
Cloudrev self built cloud disk practice, I said that no one can limit my capacity and speed
企业级SaaS CRM实现
JVM指令助记符
[go practical basis] how to bind and use URL parameters in gin
Matplotlib剑客行——初相识Matplotlib
Talk about the secret of high performance of message queue -- zero copy technology
Cloud computing in my eyes - PAAS (platform as a service)
Actual combat of microservices | discovery and invocation of original ecosystem implementation services
一篇详解带你再次重现《统计学习方法》——第二章、感知机模型
idea查看字节码配置
Jingdong senior engineer has developed for ten years and compiled "core technology of 100 million traffic website architecture"
Discussion on improving development quality and reducing test bug rate