SSM整合Ueditor的上传图片功能常见错误解决办法
?
本文總結得不好,如果有人和我遇到同樣的問題,先別急著看我咋改的,因為,前面的是我昨天寫的,寫到后面,最后發現是路徑問題,這個路徑問題我搞了很久,很久,很久,今早起來我都覺得要放棄的時候,我又嘗試著改了一下那個controller的代碼里面的rootPath,改回原來的,居然,成功了,照片能上傳能顯示,但是在后臺測試輸出的路徑感覺很奇怪,但是既然能成功了,作為小菜鳥的我也不敢再輕易改動了。
其實網上的大部分的辦法都是可行的,如果換在自己項目上,感覺不行,那大部分都是路徑問題,建議下載源代碼,可以進去看看源代碼怎么寫的,可以輸出一下各種信息,讓你更了解在哪出了問題,我就是,不停的sysout,一直翻源代碼,我都覺得對這個源碼都熟悉了。
我總結了我自己出錯的兩個重點,一,json文件是否讀取到;二:路徑!路徑!路徑!這個不好說,要看你自己的項目,這個得自己摸索。加油,我耗時一周,終于配置成功了。抱歉,學藝不精,求不噴。
我的畢設也要用到富文本編輯器,我選擇了Ueditor,網上很多人也用了,有些改配置改得很簡單就成功了,有些還要修改源碼,我都試過了,按照網上的方式,上傳圖片終究配置不成功,之前我的配置是按照網上的,在這不詳細寫了,一搜一大把,這里主要是記錄我在網上查不到的解決辦法。
以為配置成功了,結果點擊上傳圖片就一直轉圈圈。
控制臺查看錯誤:
ueditor.all.js:24557 Uncaught ReferenceError: errorHandler is not defined
? ? at HTMLInputElement.<anonymous> (ueditor.all.js:24557)
(anonymous) @ ueditor.all.js:24557?
我按照網上改寫的controller代碼
@RequestMapping("/config")public void ueditorConfig(HttpServletRequest request, HttpServletResponse response) {System.out.println("edite 經過的request");response.setContentType("application/json");response.setHeader("ContentType", "text/html");String action = request.getParameter("action");System.out.println("action:"+action);String rootPath = request.getSession().getServletContext().getRealPath("/");System.out.println("rootPath:"+rootPath);try {request.setCharacterEncoding("utf-8");String exec = new ActionEnter(request, rootPath).exec();System.out.println("exec"+exec);//輸出了錯誤信息PrintWriter writer = response.getWriter();writer.write(exec);writer.flush();writer.close();} catch (IOException e) {System.out.println("edite 經過的request出錯..");}}發現控制臺輸出:
edite 經過的request
action:config
rootPath:/Users/chenjiafeng/IdeaProjects/TSS/target/TSS-1.0-SNAPSHOT/
exec{"state": "\u914d\u7f6e\u6587\u4ef6\u521d\u59cb\u5316\u5931\u8d25"}
edite 經過的request
\u914d\u7f6e\u6587\u4ef6\u521d\u59cb\u5316\u5931\u8d25。百度這句話的意思是配置文件初始化失敗
又百度了很久,我猜測,是不是讀取不到config.json,于是我在源碼下測試:
(怎么進入方法這應該都懂的,修改源碼的前提是把源碼下載過來,網上的都有教程)
進入ActionEnter-->
在進入ConfigManager--> 找到該方法,輸出一下這個getConfigPath看看,重啟服務器,重新運行,點擊上傳圖片,控制臺輸出這些信息:edite 經過的request
action:config
rootPath:/Users/chenjiafeng/IdeaProjects/TSS/target/TSS-1.0-SNAPSHOT/
getConfigPath:/Users/chenjiafeng/IdeaProjects/TSS/target/TSS-1.0-SNAPSHOT/config.json
exec{"state": "\u914d\u7f6e\u6587\u4ef6\u521d\u59cb\u5316\u5931\u8d25"}
這問題就出來了,果然。路徑出錯,我這項目路徑沒有這個config.json文件,我就說這個rootPath路徑咋怪怪的,我找找該怎么改這個路徑。 我看看是路徑那部分出了錯,然后在剛剛那個方法輸出得更細一點,醬:
?
private String getConfigPath () {System.out.println("getConfigPath:"+this.parentPath + File.separator + ConfigManager.configFileName);System.out.println("this.parentPath:"+this.parentPath);System.out.println("File.separator:"+File.separator);System.out.println("ConfigManager.configFileName:"+ConfigManager.configFileName);return this.parentPath + File.separator + ConfigManager.configFileName;}又重啟又運行,控制臺輸出以下信息:
edite 經過的request
action:config
rootPath:/Users/chenjiafeng/IdeaProjects/TSS/target/TSS-1.0-SNAPSHOT/
getConfigPath:/Users/chenjiafeng/IdeaProjects/TSS/target/TSS-1.0-SNAPSHOT/config.json
this.parentPath:/Users/chenjiafeng/IdeaProjects/TSS/target/TSS-1.0-SNAPSHOT
File.separator:/
ConfigManager.configFileName:config.json
exec{"state": "\u914d\u7f6e\u6587\u4ef6\u521d\u59cb\u5316\u5931\u8d25"}
哦豁,看見沒,這個父路徑的錯?this.parentPath。那這個this.parentPath哪來的,我找找。
.......(此處過了很久,沒改成功,但是,我直接在方法上面寫了那個文件的所在路徑,hehehehehe,像這樣:)
(能想到這個辦法,我可能是傻了吧。。。)然后,運行,我去,居然可以顯示了,
沒上傳成功,控制臺輸出:
exec{"state": "\u672a\u627e\u5230\u4e0a\u4f20\u6570\u636e"}. ? 意思也是“未找到上傳數據”
到這真正證實了,就是json文件沒讀到,現在讀到了,又有新的問題了(此處又過了很久)。未找到數據的原因是spring攔截了。所以要寫一個繼承CommonsMultipartResolver的子類,放行。百度了很久,終于找到一篇是ssm的攔截,超級感謝他!
這是這位作者的鏈接:https://blog.csdn.net/qq_38350609/article/details/89212496
這個類是這樣寫的:
package com.mandy.filter;import javax.servlet.http.HttpServletRequest;public class CommonMultipartResolver extends org.springframework.web.multipart.commons.CommonsMultipartResolver {public boolean isMultipart(HttpServletRequest request){System.out.println("進入isMultipart");String uri=request.getRequestURI();System.out.println(uri);if(uri!=null&&uri.indexOf("/config")>0){System.out.println("CommonsMultipartResolver放行");return false;}System.out.println("CommonsMultipartResolver攔截");return super.isMultipart(request);} }并且要在springmvc.xml配置:(其實我之前已經有個multipartResolver,但是為了測試,先注釋掉了)
<bean id="multipartResolver"class="com.mandy.filter.CommonMultipartResolver"><!-- set the max upload size100MB --><property name="maxUploadSize"><value>104857600</value></property><property name="maxInMemorySize"><value>4096</value></property><property name="defaultEncoding"><value>utf-8</value></property></bean>然后,再次運行,哈哈哈哈哈
?
顯示上傳成功,但是....??????
圖片顯示不了???好吧,發現我的控制臺輸出:
進入isMultipart
/TSS/TSS/TSS/upload/20200207/1581058492731010505.jpeg
CommonsMultipartResolver攔截
Failed to load resource: the server responded with a status of 404 () (這是谷歌瀏覽器的錯誤信息,也就是說,獲取不到圖片,那就是路徑問題)
這路徑一看就不對,而且也沒放行。不過,確實成功上傳了,雖然不是我想要的路徑
這是一條分割線,中間我嘗試修改了很久的代碼,因為改得太多了,我都不知道要從何說起,但是現在配置成功了,我就把我成功的代碼貼上去,大家好參考參考。
controller的代碼:
@RequestMapping("/config")public void ueditorConfig(HttpServletRequest request, HttpServletResponse response) {response.setContentType("application/json");response.setHeader("ContentType", "text/html");String action = request.getParameter("action");System.out.println("action:" + action);String rootPath = request.getSession().getServletContext().getRealPath("/");try {request.setCharacterEncoding("utf-8");String exec = new ActionEnter(request, rootPath).exec();System.out.println("exec" + exec);//輸出了錯誤信息PrintWriter writer = response.getWriter();writer.write(exec);writer.flush();writer.close();} catch (IOException e) {System.out.println("edite 經過的request出錯..");}}config.json配置(就是修改了圖片訪問前綴和保存路徑)
?
其他都和網上教程一樣的,大家自行百度,以下是配置好的,能顯示圖片了。
?
總結
以上是生活随笔為你收集整理的SSM整合Ueditor的上传图片功能常见错误解决办法的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 清风:数学建模算法、编程和写作培训
- 下一篇: 电信、oppo面经