|  |  |  | <!DOCTYPE html> | 
					
						
							|  |  |  | <html lang="zh"> | 
					
						
							|  |  |  |     <head> | 
					
						
							|  |  |  |         <meta charset="utf-8" /> | 
					
						
							|  |  |  |         <title>图片跨域上传示例 - Editor.md examples</title> | 
					
						
							|  |  |  |         <link rel="stylesheet" href="css/style.css" /> | 
					
						
							|  |  |  |         <link rel="stylesheet" href="../css/editormd.css" /> | 
					
						
							|  |  |  |         <link rel="shortcut icon" href="https://pandao.github.io/editor.md/favicon.ico" type="image/x-icon" /> | 
					
						
							|  |  |  |     </head> | 
					
						
							|  |  |  |     <body> | 
					
						
							|  |  |  |         <div id="layout" style="height: 2000px;background: #f6f6f6;"> | 
					
						
							|  |  |  |             <header> | 
					
						
							|  |  |  |                 <h1>图片跨域上传示例</h1> | 
					
						
							|  |  |  |                 <p>Image cross-domain upload example.</p> | 
					
						
							|  |  |  |             </header> | 
					
						
							|  |  |  |             <div id="test-editormd"> | 
					
						
							|  |  |  |                 <textarea style="display:none;">#### Settings | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | ```javascript | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |     imageUpload       : true, | 
					
						
							|  |  |  |     imageFormats      : ["jpg", "jpeg", "gif", "png", "bmp", "webp"], | 
					
						
							|  |  |  |     imageUploadURL    : "http://xxxxxxx/editor.md/examples/php/cross-domain-upload.php?test=dfdf", | 
					
						
							|  |  |  |     crossDomainUpload : true, | 
					
						
							|  |  |  |     uploadCallbackURL : "http://xxxxxx/upload_callback.html?test=dfdf" | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | ``` | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | #### 跨域上传原理 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 利用 iframe 来实现,A 站 POST 到 B 站,B 站处理上传后再跳转回到 A 站的 callback 页面,callback 页面此时在 iframe 内(即同域下),再通过 window.parent 就可以操作父页面的任意元素了。 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | #### 跨域上传示例 PHP 版 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 当前域名:blog.xxx.com/post.php | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | ```html | 
					
						
							|  |  |  | <form method="post" target="upload-iframe" enctype="multipart/form-data" action="http://static.xxx.com/uploader.php?callback=http://blog.xxx.com/upload-callback.html"> | 
					
						
							|  |  |  |     <input type="file" name="file" accept="image/*" /> | 
					
						
							|  |  |  |     <input type="submit" id="submit" value="开始上传" /> | 
					
						
							|  |  |  | </form> | 
					
						
							|  |  |  | <iframe name="upload-iframe" style="display:none;" frameborder="0"></iframe>   | 
					
						
							|  |  |  | ```      | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 图片服务器:static.xxx.com/uploader.php | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | ```php | 
					
						
							|  |  |  | <?php | 
					
						
							|  |  |  | header("Access-Control-Allow-Origin: *"); // Setting allow domian name | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | $file = 'uploads/' . $_FILES['file']['name']; | 
					
						
							|  |  |  | // 详细过程略 | 
					
						
							|  |  |  | move_uploaded_file($_FILES['file']['tmp_name'], $file); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | $location = $_GET['callback'].'?success=1&message=xxxxxxx&url=http://static.xxx.com/2015/02/15'.$file.'&temp='.date('ymdhis'); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | header('location:' . $location); | 
					
						
							|  |  |  | exit; | 
					
						
							|  |  |  | ?> | 
					
						
							|  |  |  | ``` | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 当前域名:blog.xxx.com/upload-callback.html | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | ```html | 
					
						
							|  |  |  | <script type="text/javascript">  | 
					
						
							|  |  |  |     var query = {}; | 
					
						
							|  |  |  |     var urlParams = window.location.search.split('?')[1]; | 
					
						
							|  |  |  |     urlParams = urlParams.split("&"); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     for (var i = 0; i< urlParams.length; i++) { | 
					
						
							|  |  |  |         var param = urlParams[i].split("=");  | 
					
						
							|  |  |  |         query[param[0]] = param[1];  | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     var imageDialog = window.parent.document.getElementById(query['dialog_id']); | 
					
						
							|  |  |  |     //console.log(imageDialog, window.parent.document, window.parent, query); | 
					
						
							|  |  |  | </script> | 
					
						
							|  |  |  | ```</textarea> | 
					
						
							|  |  |  |             </div> | 
					
						
							|  |  |  |         </div>         | 
					
						
							|  |  |  |         <script src="js/jquery.min.js"></script> | 
					
						
							|  |  |  |         <script src="../editormd.js"></script> | 
					
						
							|  |  |  |         <script type="text/javascript"> | 
					
						
							|  |  |  |             $(function() { | 
					
						
							|  |  |  |                 var testEditor = editormd("test-editormd", { | 
					
						
							|  |  |  |                     width             : "90%", | 
					
						
							|  |  |  |                     height            : 640, | 
					
						
							|  |  |  |                     markdown          : "", | 
					
						
							|  |  |  |                     path              : '../lib/', | 
					
						
							|  |  |  |                     imageUpload       : true, | 
					
						
							|  |  |  |                     imageFormats      : ["jpg", "jpeg", "gif", "png", "bmp", "webp"], | 
					
						
							|  |  |  |                     imageUploadURL    : "http://www.ipandao.com/editor.md/examples/php/cross-domain-upload.php?test=dfdf", | 
					
						
							|  |  |  |                     crossDomainUpload : true, | 
					
						
							|  |  |  |                     uploadCallbackURL : "http://localhost/editor.md/examples/php/upload_callback.html?test=dfdf" | 
					
						
							|  |  |  |                      | 
					
						
							|  |  |  |                     /* | 
					
						
							|  |  |  |                      跨域时,上传的图片服务器后台只需要返回一个跳转 URL 并跳转到原页面同域下的 callback 页面,结构如下: | 
					
						
							|  |  |  |                      { | 
					
						
							|  |  |  |                         success   : 0 | 1,   // 0 表示上传失败,1 表示上传成功 | 
					
						
							|  |  |  |                         message   : "提示的信息,上传成功或上传失败及错误信息等。", | 
					
						
							|  |  |  |                         dialog_id : $_GET['dialog_id'], | 
					
						
							|  |  |  |                         url       : "远程图片地址"    // 上传成功时才返回 | 
					
						
							|  |  |  |                      } | 
					
						
							|  |  |  |                      */ | 
					
						
							|  |  |  |                 }); | 
					
						
							|  |  |  |             }); | 
					
						
							|  |  |  |         </script> | 
					
						
							|  |  |  |     </body> | 
					
						
							|  |  |  | </html> |