109 lines
		
	
	
		
			4.3 KiB
		
	
	
	
		
			HTML
		
	
	
	
			
		
		
	
	
			109 lines
		
	
	
		
			4.3 KiB
		
	
	
	
		
			HTML
		
	
	
	
| <!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> |