全網最直接簡單。百度富文本跨域上傳文件到文件服務器

看了很多文章其實也有很多辦法,實現跨域上傳。現在講我目前所用的方法。只實現的多圖上傳。單圖上傳失敗。

接下來必須認真的看完文章。

當前我用的 版本爲UEditor1.4.3。

這裏主要是實現重寫接收文件的action(controller).

建議查看官方文檔瞭解頁面上請求時傳的是那些參數(數據)以及返回格式

http://fex.baidu.com/ueditor/#dev-request_specification

 

瞭解差不多了。現在開始配置。

現有項目A,B. 其中,A爲前端需要選擇文件上的富文本框。B 項目爲接受文件且返回數據。

 

首先 A ,B,項目必須引入百度富文本包

<dependency>
	      <groupId>cn.songxinqiang</groupId>
	      <artifactId>com.baidu.ueditor</artifactId>
	      <version>1.4.3</version>
	    </dependency>

第二步,A項目中 下載百度富文本組件ueditor。B項目中在webapp 引入 ueditor富文本的 config.json 文件做用於配置返回正確的文件路徑

第三步,在A項目中富文本組件的 ueditor.config.js 文件中的,

serverUrl: URL + "jsp/controller.jsp"  改爲項目B的請求action 比如  serverUrl:"http://127.0.0.1:8080/fileserver/ueditorUpload.action"  ,這樣你發現。A項目的百度富文本只要有任何操作都會經過此鏈接。

第四步。只管寫B項目中ueditorUpload()接受方法以及配置  config.json 裏面的參數

項目B的框架中用到了struts2版本 2.3.37。所以action這樣寫

	private File upfile; // upfile 爲百度富文本圖片上傳對象
	
	/**
	 * 百度富文本上傳url
	 */
	public void ueditorUpload() throws Exception{
		String json = null;
	  	request.setCharacterEncoding( "utf-8" );
		response.setHeader("Content-Type" , "text/html");
		response.setHeader("Access-Control-Allow-Methods", "*");
		//必須指定那個服務器上傳的ip或域名
	    response.setHeader("Access-Control-Allow-Origin", "*");
		//支持跨域上傳
	    response.setHeader("Access-Control-Allow-Headers", "X-Requested-With,X_Requested_With");
	   
//		String rootPath = application.getRealPath( "/" );
//	    String rootPath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+request.getContextPath();
//	    String rootPath = getClasspath();
	    String rootPath = request.getSession().getServletContext().getRealPath("")+File.separator;
System.out.println("-------------------請求參數--------------------");
	    Enumeration paramNames = request.getParameterNames();
		while (paramNames.hasMoreElements()) {
		        String name =(String) paramNames.nextElement();
		        String value = request.getParameter(name);  
		        System.out.println(name+"="+value);
		    }
		Map<String, String> map = new HashMap<String, String>();
		String action_name = request.getParameter("action") ==null?"": request.getParameter("action");
		switch (action_name.trim().toLowerCase()) {
		case "uploadimage"://上傳圖片
			if(upfile!=null ) {
				String fileName = request.getParameter("name") ==null?"": request.getParameter("name");
                //判斷非空
				if(!Handle.isNull(fileName)) {
					String suffix = fileName.substring(fileName.lastIndexOf("."),fileName.length()).replace(".","");//後綴名
					 if("jpeg".equals(suffix.toLowerCase()) || "jpg".equals(suffix.toLowerCase())|| "png".equals(suffix.toLowerCase()) || "gif".equals(suffix.toLowerCase())) {
						//獲取要保存文件夾的物理路徑(絕對路徑)
						String path = "/uploadFiles/uploadImgs"+File.separator + new SimpleDateFormat("yyyyMMdd").format(new Date());
						
						String realPath = ServletActionContext.getServletContext().getRealPath(path);
						
						File files = new File(realPath);
						
						//測試此抽象路徑名錶示的文件或目錄是否存在。若不存在,創建此抽象路徑名指定的目錄,包括所有必需但不存在的父目錄。
						if(!files.exists()) {files.mkdirs();}
						try {
							String name  = UUID.randomUUID().toString().trim().replaceAll("-", "");
							//保存文件
							FileUtils.copyFile(upfile, new File(files,name+"."+suffix));
							if(!new File(realPath+File.separator+name+"."+suffix).exists()) {
								map.put("ErrorMsg", "上傳失敗,文件未上傳成功");
							}else {
								String basePath = path+File.separator+name+"."+suffix;
								map.put("url", basePath);
								map.put("state", "SUCCESS");
								map.put("title", name+"."+suffix);
								map.put("original", name+"."+suffix);
								
								//返回json 格式
//								{
//								    "state": "SUCCESS",
//								    "url": "upload/demo.jpg",
//								    "title": "demo.jpg",
//								    "original": "demo.jpg"
//								}
								json = JSONArray.fromObject(map).toString();
								json = json.substring(1,json.length()-1);
							}
						} catch (IOException e) {
							e.printStackTrace();
						}
					}else {
						json = new ActionEnter(request, rootPath).exec();
					}
				}else{
					json = new ActionEnter(request, rootPath).exec();
				}
			}else {
				json = new ActionEnter(request, rootPath).exec();
			}
			break;

		default:
			json = new ActionEnter(request, rootPath).exec();
			break;
		}
//		System.out.println("---"+json);
		PrintWriter out = null;
		response.setCharacterEncoding("utf-8");
		try {
			out = response.getWriter();
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}finally {
			out.write(json);
		}
}

    public File getUpfile() {
		return upfile;
	}

	public void setUpfile(File upfile) {
		this.upfile = upfile;
	}
	

如果你是springmvc的方式上傳可參考


@RequestMapping(value ="upload")
public String uploadImage(HttpServletRequest request,HttpServletResponse response)throws IllegalStateException, IOException{
response.setContentType("text/html;charset=UTF-8");
	  	request.setCharacterEncoding( "utf-8" );
		response.setHeader("Content-Type" , "text/html");
		response.setHeader("Access-Control-Allow-Methods", "*");
		//必須指定那個服務器上傳的ip或域名
	    response.setHeader("Access-Control-Allow-Origin", "*");
		//支持跨域上傳
	    response.setHeader("Access-Control-Allow-Headers", "X-Requested-With,X_Requested_With");
// 轉型爲MultipartHttpRequest:
MultipartHttpServletRequest multipartRequest=(MultipartHttpServletRequest) request;
// 獲得文件:
MultipartFile file = multipartRequest.getFile("upfile"); 


/***剩下的是你保存文件以及返回什麼格式的json***/

}

以上不知道改返回什麼格式的請看文章開頭的官方文檔地址

最後配置B項目中的  config.json

 

/* 前後端通信相關的配置,註釋只允許使用多行方式 */
{
	
    /* 上傳圖片配置項 */
    "imageActionName": "uploadimage", /* 執行上傳圖片的action名稱 */
    "imageFieldName": "upfile", /* 提交的圖片表單名稱 */
    "imageMaxSize": 2048000, /* 上傳大小限制,單位B */
    "imageAllowFiles": [".png", ".jpg", ".jpeg", ".gif", ".bmp"], /* 上傳圖片格式顯示 */
    "imageCompressEnable": true, /* 是否壓縮圖片,默認是true */
    "imageCompressBorder": 1600, /* 圖片壓縮最長邊限制 */
    "imageInsertAlign": "none", /* 插入的圖片浮動方式 */
    "imageUrlPrefix": "http://127.0.0.1:8080/fileserver", /*  圖片訪問路徑前綴 */
    "imagePathFormat": "/uploadFiles/uplouploadImgsdImgs/{yyyy}{mm}{dd}/{time}{rand:6}", /* 上傳保存路徑,可以自定義保存路徑和文件名格式 */
                                /* {filename} 會替換成原文件名,配置這項需要注意中文亂碼問題 */
                                /* {rand:6} 會替換成隨機數,後面的數字是隨機數的位數 */
                                /* {time} 會替換成時間戳 */
                                /* {yyyy} 會替換成四位年份 */
                                /* {yy} 會替換成兩位年份 */
                                /* {mm} 會替換成兩位月份 */
                                /* {dd} 會替換成兩位日期 */
                                /* {hh} 會替換成兩位小時 */
                                /* {ii} 會替換成兩位分鐘 */
                                /* {ss} 會替換成兩位秒 */
                                /* 非法字符 \ : * ? " < > | */
                                /* 具請體看線上文檔: fex.baidu.com/ueditor/#use-format_upload_filename */

    /* 塗鴉圖片上傳配置項 */
    "scrawlActionName": "uploadscrawl", /* 執行上傳塗鴉的action名稱 */
    "scrawlFieldName": "upfile", /* 提交的圖片表單名稱 */
    "scrawlPathFormat": "/ueditor/jsp/upload/image/{yyyy}{mm}{dd}/{time}{rand:6}", /* 上傳保存路徑,可以自定義保存路徑和文件名格式 */
    "scrawlMaxSize": 2048000, /* 上傳大小限制,單位B */
    "scrawlUrlPrefix": "http://127.0.0.1:8080/fileserver", /* 圖片訪問路徑前綴 */
    "scrawlInsertAlign": "none",

    /* 截圖工具上傳 */
    "snapscreenActionName": "uploadimage", /* 執行上傳截圖的action名稱 */
    "snapscreenPathFormat": "/ueditor/jsp/upload/image/{yyyy}{mm}{dd}/{time}{rand:6}", /* 上傳保存路徑,可以自定義保存路徑和文件名格式 */
    "snapscreenUrlPrefix": "http://127.0.0.1:8080/fileserver", /* 圖片訪問路徑前綴 */
    "snapscreenInsertAlign": "none", /* 插入的圖片浮動方式 */

    /* 抓取遠程圖片配置 */
    "catcherLocalDomain": ["127.0.0.1", "localhost", "img.baidu.com"],
    "catcherActionName": "catchimage", /* 執行抓取遠程圖片的action名稱 */
    "catcherFieldName": "source", /* 提交的圖片列表表單名稱 */
    "catcherPathFormat": "/ueditor/jsp/upload/image/{yyyy}{mm}{dd}/{time}{rand:6}", /* 上傳保存路徑,可以自定義保存路徑和文件名格式 */
    "catcherUrlPrefix": "http://127.0.0.1:8080/fileserver", /* 圖片訪問路徑前綴 */
    "catcherMaxSize": 2048000, /* 上傳大小限制,單位B */
    "catcherAllowFiles": [".png", ".jpg", ".jpeg", ".gif", ".bmp"], /* 抓取圖片格式顯示 */

    /* 上傳視頻配置 */
    "videoActionName": "uploadvideo", /* 執行上傳視頻的action名稱 */
    "videoFieldName": "upfile", /* 提交的視頻表單名稱 */
    "videoPathFormat": "/ueditor/jsp/upload/video/{yyyy}{mm}{dd}/{time}{rand:6}", /* 上傳保存路徑,可以自定義保存路徑和文件名格式 */
    "videoUrlPrefix": "http://127.0.0.1:8080/fileserver", /* 視頻訪問路徑前綴 */
    "videoMaxSize": 102400000, /* 上傳大小限制,單位B,默認100MB */
    "videoAllowFiles": [
        ".flv", ".swf", ".mkv", ".avi", ".rm", ".rmvb", ".mpeg", ".mpg",
        ".ogg", ".ogv", ".mov", ".wmv", ".mp4", ".webm", ".mp3", ".wav", ".mid"], /* 上傳視頻格式顯示 */

    /* 上傳文件配置 */
    "fileActionName": "uploadfile", /* controller裏,執行上傳視頻的action名稱 */
    "fileFieldName": "upfile", /* 提交的文件表單名稱 */
    "filePathFormat": "/ueditor/jsp/upload/file/{yyyy}{mm}{dd}/{time}{rand:6}", /* 上傳保存路徑,可以自定義保存路徑和文件名格式 */
    "fileUrlPrefix": "http://127.0.0.1:8080/fileserver", /* 文件訪問路徑前綴 */
    "fileMaxSize": 51200000, /* 上傳大小限制,單位B,默認50MB */
    "fileAllowFiles": [
        ".png", ".jpg", ".jpeg", ".gif", ".bmp",
        ".flv", ".swf", ".mkv", ".avi", ".rm", ".rmvb", ".mpeg", ".mpg",
        ".ogg", ".ogv", ".mov", ".wmv", ".mp4", ".webm", ".mp3", ".wav", ".mid",
        ".rar", ".zip", ".tar", ".gz", ".7z", ".bz2", ".cab", ".iso",
        ".doc", ".docx", ".xls", ".xlsx", ".ppt", ".pptx", ".pdf", ".txt", ".md", ".xml"
    ], /* 上傳文件格式顯示 */

    /* 列出指定目錄下的圖片 */
    "imageManagerActionName": "listimage", /* 執行圖片管理的action名稱 */
    "imageManagerListPath": "/ueditor/jsp/upload/image/", /* 指定要列出圖片的目錄 */
    "imageManagerListSize": 20, /* 每次列出文件數量 */
    "imageManagerUrlPrefix": "", /* 圖片訪問路徑前綴 */
    "imageManagerInsertAlign": "none", /* 插入的圖片浮動方式 */
    "imageManagerAllowFiles": [".png", ".jpg", ".jpeg", ".gif", ".bmp"], /* 列出的文件類型 */

    /* 列出指定目錄下的文件 */
    "fileManagerActionName": "listfile", /* 執行文件管理的action名稱 */
    "fileManagerListPath": "/ueditor/jsp/upload/file/", /* 指定要列出文件的目錄 */
    "fileManagerUrlPrefix": "", /* 文件訪問路徑前綴 */
    "fileManagerListSize": 20, /* 每次列出文件數量 */
    "fileManagerAllowFiles": [
        ".png", ".jpg", ".jpeg", ".gif", ".bmp",
        ".flv", ".swf", ".mkv", ".avi", ".rm", ".rmvb", ".mpeg", ".mpg",
        ".ogg", ".ogv", ".mov", ".wmv", ".mp4", ".webm", ".mp3", ".wav", ".mid",
        ".rar", ".zip", ".tar", ".gz", ".7z", ".bz2", ".cab", ".iso",
        ".doc", ".docx", ".xls", ".xlsx", ".ppt", ".pptx", ".pdf", ".txt", ".md", ".xml"
    ] /* 列出的文件類型 */

}

其中   "imageActionName": "uploadimage", /* 執行上傳圖片的action名稱 */

 "imageUrlPrefix": "http://127.0.0.1:8080/fileserver", /*  圖片訪問路徑前綴 */  項目B的訪問路徑

到這裏基本可以允許上傳了。在A項目中使用多圖上傳

 

 

另外推薦另一大牛寫的文章 , 總能找到你想要的

https://blog.csdn.net/zzq900503/article/details/77540331

 

 

 

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章