Java Ueditor集成七牛云上传文件

在网上看了很多文章,基本上都是残缺的,没有完整版的ueditor集成七牛云,有的还吐槽说ueditor不好源代码垃圾,而且有些的博主实现集成七牛云上传文件还需要改ueditor的源代码,这就导致很多人难以理解,其实并非如此,ueditor官网其实有很多值得学习的地方,只是有些人没有仔细阅读和研究,才导致这样的误解,我通过很长一段时间仔细的阅读ueditor的官网和深入研究完美的解决了这个问题,希望以下的文章对你有帮助!

1.分布式文件上传服务-七牛云上传文件

七牛云官方文档阅读
https://www.qiniu.com/
1.java服务端上传

   1.Maven jar 包依赖
	<!-- Inherit defaults from Spring Boot -->
	<parent>
		<groupId>org.springframework.boot</groupId>
		<artifactId>spring-boot-starter-parent</artifactId>
		<version>1.5.10.RELEASE</version>
	</parent>

	<!-- Add typical dependencies for a web application -->
	<dependencies>
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-web</artifactId>
		</dependency>

		<!--必须有才能编译jsp -->
		<dependency>
			<groupId>org.apache.tomcat.embed</groupId>
			<artifactId>tomcat-embed-jasper</artifactId>
			<scope>provided</scope>
		</dependency>

		<!-- JSTL标签类 -->
		<dependency>
			<groupId>jstl</groupId>
			<artifactId>jstl</artifactId>
			<version>1.2</version>
		</dependency>
		<!-- 热部署 -->
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-devtools</artifactId>
			<optional>true</optional>
		</dependency>


		<!--测试 -->
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-test</artifactId>
			<scope>test</scope>
		</dependency>
		<!--七牛云存储 -->
		<dependency>
			<groupId>com.qiniu</groupId>
			<artifactId>qiniu-java-sdk</artifactId>
			<version>[7.2.0, 7.2.99]</version>
		</dependency>

	</dependencies>

2.application.yml 配置文件

server:
  port: 8080
 # context-path: /c1
spring:
  mvc:
    view: 
      prefix: /WEB-INF/jsp/
      suffix: .jsp

3、代码

@RunWith(SpringJUnit4ClassRunner.class)
@SpringBootTest(classes=QiniuRun.class)
public class Qiniu_Test {
	@Test
	public void testqiniu() throws Exception {
		//构造一个带指定Zone对象的配置类
		Configuration cfg = new Configuration(Zone.zone2());
		//...其他参数参考类注释
		UploadManager uploadManager = new UploadManager(cfg);
		//...生成上传凭证,然后准备上传
		String accessKey = "U4AggYCbrMXPH6qwo5G10EWfvehE-Izi5hZFUSZN";
		String secretKey = "SkIWzDlTf0jgWNxcObvI1uH2A0fWTKDPkk7ogK-W";
		String bucket = "data";
		//如果是Windows情况下,格式是 D:\\qiniu\\test.png
		String localFilePath = "D:\\源码时代\\a.jpg";
		//默认不指定key的情况下,以文件内容的hash值作为文件名
		String key = "b.jpg";
		Auth auth = Auth.create(accessKey, secretKey);
		String upToken = auth.uploadToken(bucket);
		try {
		    Response response = uploadManager.put(localFilePath, key, upToken);
		    //解析上传成功的结果
		    DefaultPutRet putRet = new Gson().fromJson(response.bodyString(), DefaultPutRet.class);
		    System.out.println(putRet.key);
		    System.out.println(putRet.hash);
		} catch (QiniuException ex) {
		    Response r = ex.response;
		    System.err.println(r.toString());
		    try {
		        System.err.println(r.bodyString());
		    } catch (QiniuException ex2) {
		        //ignore
		    }
		}
	}	
}

3.js客户端上传
1.学习官网js-sdk的例子
2.代码如下

@RestController
public class TokenControllrt {

	@RequestMapping("/uptoken")
	public Map<String, String> uptoken() {
		//...生成上传凭证,然后准备上传
		String accessKey = "U4AggYCbrMXPH6qwo5G10EWfvehE-Izi5hZFUSZN";
		String secretKey = "SkIWzDlTf0jgWNxcObvI1uH2A0fWTKDPkk7ogK-W";
		String bucket = "data";
		Auth auth = Auth.create(accessKey, secretKey);
		String upToken = auth.uploadToken(bucket);
		System.out.println(upToken);
		Map<String, String>map=new HashMap<String, String>();
		map.put("uptoken", upToken);
		return map;
	}
	
}

3.页面代码


<div id="container">
<button id="pickfiles" >上传</button>
</div>



<img id="img"  />

<script type="text/javascript">

var uploader = Qiniu.uploader({
   disable_statistics_report: false,   // 禁止自动发送上传统计信息到七牛,默认允许发送
   runtimes: 'html5,flash,html4',      // 上传模式,依次退化
   browse_button: 'pickfiles',         // 上传选择的点选按钮,**必需**
   // 在初始化时,uptoken, uptoken_url, uptoken_func 三个参数中必须有一个被设置
   // 切如果提供了多个,其优先级为 uptoken > uptoken_url > uptoken_func
   // 其中 uptoken 是直接提供上传凭证,uptoken_url 是提供了获取上传凭证的地址,如果需要定制获取 uptoken 的过程则可以设置 uptoken_func
    uptoken_url: '/uptoken',         // Ajax 请求 uptoken 的 Url,**强烈建议设置**(服务端提供)
   // uptoken_func: function(file){    // 在需要获取 uptoken 时,该方法会被调用
   //    // do something
   //    return uptoken;
   // },
   get_new_uptoken: true,             // 设置上传文件的时候是否每次都重新获取新的 uptoken
   // downtoken_url: '/downtoken',
   // Ajax请求downToken的Url,私有空间时使用,JS-SDK 将向该地址POST文件的key和domain,服务端返回的JSON必须包含`url`字段,`url`值为该文件的下载地址
    unique_names: true,              // 默认 false,key 为文件名。若开启该选项,JS-SDK 会为每个文件自动生成key(文件名)
   // save_key: true,                  // 默认 false。若在服务端生成 uptoken 的上传策略中指定了 `save_key`,则开启,SDK在前端将不对key进行任何处理
   domain: 'http://pc3sge8uk.bkt.clouddn.com',     // bucket 域名,下载资源时用到,如:'http://xxx.bkt.clouddn.com/' **必需**
   container: 'container',             // 上传区域 DOM ID,默认是 browser_button 的父元素,
   max_file_size: '100mb',             // 最大文件体积限制
   flash_swf_url: 'path/of/plupload/Moxie.swf',  //引入 flash,相对路径
   max_retries: 3,                     // 上传失败最大重试次数
   dragdrop: true,                     // 开启可拖曳上传
   drop_element: 'container',          // 拖曳上传区域元素的 ID,拖曳文件或文件夹后可触发上传
   chunk_size: '4mb',                  // 分块上传时,每块的体积
   auto_start: true,                   // 选择文件后自动上传,若关闭需要自己绑定事件触发上传,
   //x_vars : {
   //    自定义变量,参考http://developer.qiniu.com/docs/v6/api/overview/up/response/vars.html
   //    'time' : function(up,file) {
   //        var time = (new Date()).getTime();
             // do something with 'time'
   //        return time;
   //    },
   //    'size' : function(up,file) {
   //        var size = file.size;
             // do something with 'size'
   //        return size;
   //    }
   //},
   init: {
       'FilesAdded': function(up, files) {
           plupload.each(files, function(file) {
               // 文件添加进队列后,处理相关的事情
           });
       },
       'BeforeUpload': function(up, file) {
              // 每个文件上传前,处理相关的事情
       },
       'UploadProgress': function(up, file) {
              // 每个文件上传时,处理相关的事情
       },
       'FileUploaded': function(up, file, info) {
              // 每个文件上传成功后,处理相关的事情
              // 其中 info.response 是文件上传成功后,服务端返回的json,形式如
              // {
              //    "hash": "Fh8xVqod2MQ1mocfI4S4KpRL6D98",
              //    "key": "gogopher.jpg"
              //  }
              // 参考http://developer.qiniu.com/docs/v6/api/overview/up/response/simple-response.html

              var domain = up.getOption('domain');
              var res = JSON.parse(info);
              var sourceLink = domain +"/"+ res.key; //获取上传成功后的文件的Url
              $('#img').attr('src',sourceLink)
       },
       'Error': function(up, err, errTip) {
              //上传出错时,处理相关的事情
       },
       'UploadComplete': function() {
              //队列文件处理完毕后,处理相关的事情
       },
       'Key': function(up, file) {
           // 若想在前端对每个文件的key进行个性化处理,可以配置该函数
           // 该配置必须要在 unique_names: false , save_key: false 时才生效

           var key = "";
           // do something with key here
           return key
       }
   }
});

</script>

ueditor 如何自定义请求地址

http://fex.baidu.com/ueditor/#qa-customurl
应用场景
ueditor 1.4.2+ 推荐使用唯一的请求地址,通过GET参数action指定不同请求类型。 但很多用户都希望使用自己写好的上传地址,下面提供一种解决方法: 由于所有ueditor请求都通过editor对象的getActionUrl方法获取请求地址,可以直接通过复写这个方法实现,例子如下:

UE.Editor.prototype._bkGetActionUrl = UE.Editor.prototype.getActionUrl;
UE.Editor.prototype.getActionUrl = function(action) {
    if (action == 'uploadimage' || action == 'uploadscrawl' || action == 'uploadimage') {
        return 'http://a.b.com/upload.php';
    } else if (action == 'uploadvideo') {
        return 'http://a.b.com/video.php';
    } else {
        return this._bkGetActionUrl.call(this, action);
    }
}
action类型以及说明
uploadimage://执行上传图片或截图的action名称
uploadscrawl://执行上传涂鸦的action名称
uploadvideo://执行上传视频的action名称
uploadfile://controller里,执行上传视频的action名称
catchimage://执行抓取远程图片的action名称
listimage://执行列出图片的action名称
listfile://执行列出文件的action名称

猜你喜欢

转载自blog.csdn.net/qq_41129811/article/details/85041317