wangEditor上傳圖片問題
文章目錄
1 問題介紹
目前就論國內富文字編輯器有N多種,但是輕量級的wangEditor擁有簡約風格、簡單易用的特點,深深吸引了我。官網文件地址
壓縮版 wangEditor.min.js 連結
未壓縮版 wangEditor.js連結註釋4197行同樣解決問題哦
此版本為wangeditor@4.2.2
如此小巧的好用的富文字編輯器,卻讓我使用出來了問題,沒錯,就是上傳圖片的問題,下面說下我使用出來的問題。
當我上傳一張圖片時,我的圖片名字可以通過
editor.config.uploadFileName = 'your-custom-fileName'
來指定名稱(此程式碼在官方文件中的上傳圖片->自定義fileName可以檢視,同樣我們也可以限制傳入圖片的數量,不過多介紹,詳看官方文件),在使用spring mvc
的controller
中我們可以指定對應的名稱進行接受該圖片。
而當我使用
wangEditor
上傳多張圖片時,它便會出現錯誤,原因是原始碼將你的名字後面預設拼接了一個index,它是從1一次開始遞增的,即當你有三招那個圖片時,你原本的名字為file
的話,當你選中三張圖片時,這三張圖片的名字依次為file1
,file2
,file3
,此時你在controller
接受引數就不太好用了,既然你通過後臺的java
程式碼解決不了此類問題,那隻能通過js
來解決了。
說了這麼多,想必大家已經明白我出現的問題和我解決的思路了,那我就從零開始一步一步使用
wangEditor
了。
2 必要的java程式碼
2.0 基礎配置
擔心讀者摸不著頭腦,才+的
2.0
,如果依賴和配置檔案已經處理完畢,則2.0
可以忽略。
2.0.1 引入依賴
<!-- json的依賴 -->
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.11.2</version>
</dependency>
<!-- 上傳檔案 -->
<dependency>
<groupId>commons-fileupload</groupId>
<artifactId>commons-fileupload</artifactId>
<version>1.4</version>
</dependency>
2.0.2 mvc.xml
<!-- 配置上傳檔案的支援 -->
<bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
<property name="defaultEncoding" value="utf-8"/>
</bean>
2.1 封裝wangEditorVO類
說必要也是有原因的,首先當我們上傳圖片後,
server
會返回一個帶有格式的資料(點選官網檢視),即{"errno":0,"data":"地址1","地址2","..."}
,這就需要我們定義一個wangEditorVO
類,用來封裝其返回的資料。
程式碼如下
package com.chao.vo;
public class WangEditorVO {
private Integer errno;
private Object data;
public Integer getErrno() {
return errno;
}
public Object getData() {
return data;
}
public static WangEditorVO success(Object data) {
WangEditorVO wangEditorVO = new WangEditorVO();
wangEditorVO.errno = 0;
wangEditorVO.data = data;
return wangEditorVO;
}
public static WangEditorVO error(Integer errno, Object data) {
WangEditorVO wangEditorVO = new WangEditorVO();
wangEditorVO.errno = errno;
wangEditorVO.data = data;
return wangEditorVO;
}
}
2.2 上傳圖片的程式碼
既然封裝返回的資料格式,那我們前臺頁面
jsp
提交的資料到後臺controller
進行處理,下面是上傳檔案的controller
類,我們需要接受圖片,進行存入指定位置(我是以本地磁碟為例,然後存入nginx
),如下程式碼:
package com.chao.controller;
import com.chao.vo.ServerResponse;
import com.chao.vo.WangEditorVO;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;
import java.io.File;
import java.io.IOException;
import java.util.*;
@Controller
@RequestMapping("/file")
public class FileUploadController {
// private static final String PRODUCT_FILE_PREFIX = "D:\\IO\\shop\\shopImage\\";
// private static final String SERVER_PREFIX = "http://localhost:8888/";
@Value("${PRODUCT_FILE_PREFIX}")
private String PRODUCT_FILE_PREFIX;
@Value("${SERVER_PREFIX}")
private String SERVER_PREFIX;
@PostMapping("/wangUpload")
@ResponseBody
public WangEditorVO wangUpload(MultipartFile[] file) throws IOException {
//當file為空時
if (file == null || file.length == 0) {
return WangEditorVO.error(1, "無圖片資訊");
}
//存入資料庫的檔案地址集合
List<String> pathList = new ArrayList<>();
for (MultipartFile multipartFile : file) {
//獲取檔名
String name = UUID.randomUUID().toString();
//拼接完整的 存放圖片地址,即:D:\\IO\\shop\\shopImage\\檔名.字尾名
File path = new File(PRODUCT_FILE_PREFIX + name + getSuffix(multipartFile));
//將圖片存放到path路徑下
multipartFile.transferTo(path);
//拼接完整的 訪問圖片地址,即:http://localhost:8888/檔名.字尾名
pathList.add(SERVER_PREFIX + name + getSuffix(multipartFile));
}
return WangEditorVO.success(pathList);
}
/**
* 獲取檔案的字尾名
*
* @param multipartFile 上傳的檔案
* @return 檔案的字尾名
*/
private String getSuffix(MultipartFile multipartFile) {
//獲取完整的檔名
String fileName = multipartFile.getOriginalFilename();
//擷取字尾
String fileSuffix = fileName.substring(fileName.lastIndexOf("."));
return fileSuffix;
}
}
3 解決前臺上傳圖片的問題
前面話說那麼多,純碎是為了鋪墊,重點是解決上傳圖片的問題,解決該問題有兩種方式,一種是我們自己定義上傳圖片
推薦
,另一種是註釋原始碼的第4197
行程式碼(name = name + (index + 1);
),選擇第一種方式時,我們先介紹上傳單張圖片,其次介紹上傳多張圖片。
3.1 上傳單張圖片
3.1.1 程式碼展示
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>測試wangEditor</title>
</head>
<body>
<%-- 富文字編輯器 --%>
<div id="details"></div>
<%-- 點選按鈕 --%>
<button type="button" id="get-html">點選獲取富文字編輯器的內容</button>
<script src="${pageContext.request.contextPath}/static/js/jquery-3.4.1.min.js"></script>
<script src="${pageContext.request.contextPath}/static/js/wangEditor.min.js"></script>
<script type="text/javascript">
const E = window.wangEditor
const editor = new E('#details')
// 配置 富文字編輯器 上傳圖片的介面
editor.config.uploadImgServer = '${pageContext.request.contextPath}/file/wangUpload';
//設定上傳圖片http請求引數名,
editor.config.uploadFileName = 'file';
// 一次最多上傳圖片的數量
editor.config.uploadImgMaxLength = 1;
//富文字編輯器提示資訊
editor.config.placeholder = '親,請記得編輯你的內容哦';
editor.create();
$('#get-html').click(function () {
var details = editor.txt.html();
console.log(details);
})
</script>
</body>
</html>
3.1.2 效果展示
3.2 上傳多張圖片
3.2.1 程式碼展示
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>測試wangEditor</title>
</head>
<body>
<%-- 富文字編輯器 --%>
<div id="details"></div>
<%-- 點選按鈕 --%>
<button type="button" id="get-html">點選獲取富文字編輯器的內容</button>
<script src="${pageContext.request.contextPath}/static/js/jquery-3.4.1.min.js"></script>
<script src="${pageContext.request.contextPath}/static/js/wangEditor.min.js"></script>
<script type="text/javascript">
const E = window.wangEditor
const editor = new E('#details')
//自己定義上傳的方法
editor.config.customUploadImg = function (resultFiles, insertImgFn) {
// resultFiles 是 input 中選中的檔案列表
// insertImgFn 是獲取圖片 url 後,插入到編輯器的方法
//建立 FormData 物件來處理資料:鍵值對的形式,鍵可以重複
var formData = new FormData();
for (var i = 0; i < resultFiles.length; i++) {
//將表單中的資料取出來,新增到file中
formData.append("file", resultFiles[i]);
}
//使用AJAX上傳圖片
$.ajax({
url: '${pageContext.request.contextPath}/file/wangUpload',
type: "POST",
data: formData,
async: false,//不傳送非同步請求
cache: false,//瀏覽器將不快取此頁面
//不設定Content-Type時,瀏覽器的值: application/x-www-form-urlencoded; charset=UTF-8
//設定contentType: false時,瀏覽器的值:application/json
contentType: false,
processData: false,//我們需要傳送DOM資訊
success: function (res) {
//處理成功後
if (res.errno == 0) {
for (var j = 0; j < res.data.length; j++) {
// 上傳圖片,返回結果,將圖片插入到編輯器中
insertImgFn(res.data[j]);
}
} else {
alert(res.msg);
return;
}
}
});
}
editor.create();
$('#get-html').click(function () {
var details = editor.txt.html();
console.log(details);
})
</script>
</body>
</html>
3.2.2 效果展示
相關文章
- springboot+wangEditor圖片上傳Spring Boot
- 跨域CORS圖片上傳問題跨域CORS
- laravel上傳圖片路徑問題Laravel
- vue如何使用富文字編輯器wangEditor自定義圖片上傳(解決跨域問題)Vue跨域
- KindEditor編輯器的圖片上傳問題
- 有關laravel 上傳圖片訪問404的問題Laravel
- iOS下html上傳圖片被旋轉問題iOSHTML
- canvas簽名圖片上傳及入庫問題Canvas
- laravel中使用WangEditor及多圖上傳Laravel
- 上傳圖片
- 前端手勢控制圖片外掛書寫四(圖片上傳及Ios圖片方向問題)前端iOS
- laravel中使用WangEditor及多圖上傳(下篇)Laravel
- 請教一個問題,關於上傳檔案和圖片的問題
- Retrofit+RxJava上傳圖片上傳圖片到後臺RxJava
- 【easyui 】上傳圖片UI
- 上傳圖片jsJS
- 直播原始碼開發,laravel-admin整合wangEditor2及上傳圖片原始碼Laravel
- 輕量級web富文字框——wangEditor使用手冊(6)——配置“上傳圖片”功能Web
- 圖片上傳及圖片處理
- [文件教程]解決sae下編輯器圖片上傳問題
- php圖片上傳之圖片轉換PHP
- java,springboot + thymeleaf 上傳圖片、刪除圖片到伺服器、本地,壓縮圖片上傳(有些圖片會失真),原圖上傳JavaSpring Boot伺服器
- 多圖片formpost上傳ORM
- input file圖片上傳
- PHP上傳圖片類PHP
- 圖片檔案上傳
- 測試圖片上傳
- PbootCMS上傳圖片變模糊、上傳圖片尺寸受限的解決方案boot
- Laravel-admin 配置 wangEditor3 富文字編輯器圖片七牛雲上傳Laravel
- vue 上傳圖片進行壓縮圖片Vue
- Ueditor 上傳圖片自動新增水印(只能上傳圖片,上傳檔案報錯)
- 學姐,影片上傳不了,我上傳了圖片
- Laravel 使用 FastDFS 上傳圖片LaravelAST
- koa 圖片上傳詳解
- Vue圖片裁剪上傳元件Vue元件
- 圖片上傳方案詳解
- js上傳圖片壓縮JS
- vue圖片預覽上傳Vue