- 浏览: 162811 次
- 性别:
- 来自: 重庆
博客专栏
-
Angularjs实战
浏览量:19246
文章分类
- 全部博客 (98)
- 工具 (2)
- 字符编码问题 (1)
- 微信开发调试工具 (2)
- java (10)
- spring (2)
- mybatis (2)
- spring boot (2)
- 其他 (1)
- spring ajax (1)
- jquery (4)
- 中间件 (3)
- oracle数据库 (2)
- oracle (1)
- 文件上传 (1)
- AngularJS (23)
- css (4)
- js (9)
- Iconfont (1)
- 个人 (1)
- WebLogic (4)
- maven (2)
- 转载 (1)
- File (2)
- webupload (4)
- tomcat (2)
- linux (2)
- Jersey (11)
- 脚本 (1)
- ftp (1)
- xdata (1)
- 钉钉 (1)
- 文档转换 (3)
- ionic (1)
- vue (2)
最新评论
-
masuweng:
java批量将多文件打包成zip格式 -
柳絮飞祭奠:
// 读取错误执行的返回流 是这个 B ...
java调用执行cmd指令启动weblogic -
109:
您好,我想知道在startServer怎么判断它是错误执行的流 ...
java调用执行cmd指令启动weblogic -
williamfan:
dataSourceConfig.getUrl()这个可以直接 ...
spring boot和mybatis入门
一、当我们使用jersey框架封装的restful进行文件上传时,会出现中文乱码,试用了过滤器设置编码都不管用。仔细想了很久解决办法,就用一个servelt来代替这个上传的restful接口实现上传的逻辑。
二、不过后来对restful设计风格和jersey底层的初步研究,发现其实可以使用jersey作为入口来接收文件流,处理还是用apache提供的commons-fileupload-1.3.1.jar来实现,内部request请求设置
编码,就不会出现文件乱码
三、前端依旧是angular封装百度提供的webupload指令实现文件的上传和分片存储
四、逻辑如下
前端
后端
ending 附件带示例
二、不过后来对restful设计风格和jersey底层的初步研究,发现其实可以使用jersey作为入口来接收文件流,处理还是用apache提供的commons-fileupload-1.3.1.jar来实现,内部request请求设置
编码,就不会出现文件乱码
三、前端依旧是angular封装百度提供的webupload指令实现文件的上传和分片存储
四、逻辑如下
前端
<!DOCTYPE html> <html> <head> <title>柳絮飞祭奠</title> <meta http-equiv="keywords" content="keyword1,keyword2,keyword3"> <meta http-equiv="description" content="this is my page"> <meta http-equiv="content-type" content="text/html; charset=UTF-8"> <link rel="stylesheet" href="../plugins/webuploader/webuploader.css" type="text/css"></link> </head> <body class="lx_droparea"> <lx-upload droparea="lx_droparea" id="upload" type="button" value="上传" style="width:80px;"></lx-ui-upload> </body> <script type="text/javascript" src="../plugins/jquery.js"></script> <script type="text/javascript" src="../plugins/angular.min.js"></script> <script type="text/javascript" src="../plugins/webuploader/webuploader.min.js"></script> <script type="text/javascript"> //设置lx.upload的配置信息 var $$runtime = {file:'/JerseyTest/api/1.0/my/upload', "swf":"",debug : true}; var lxUpload=angular.module("lx.upload",[]); /** * * */ lxUpload.directive('lxUpload',function(){ var option = { restrict : 'E', replace : true, template : '<div>上传文件</div>', scope:true, link : function($scope, $element, $attrs) { //声明作用域内上传数据对象 $scope.upload={"id":"","droparea":"","md5":"","length":0,"data":[],"tip":true,"isupload":false}; //设置上传文件id $scope.upload.id="#"+$attrs.id; $scope.upload.droparea="."+$attrs.droparea; WebUploader.Uploader.register({ "before-send-file" : "beforeSendFile" }, { // 时间点1:所有分块进行上传之前调用此函数 beforeSendFile : function(file) { var deferred = WebUploader.Deferred(); // 1、使用md5计算文件的唯一标记,用于断点续传 uploader.md5File(file).then(function(val) { $scope.upload.md5= val; console.log($scope.upload.md5); // 2.1.5延迟解决 deferred.resolve(); }); return deferred.promise(); }, }); var uploader = WebUploader.create({ // swf文件路径 swf : $$runtime.swf, // 文件接收服务端。 server : $$runtime.file, // 选择文件的按钮。可选。 // 内部根据当前运行是创建,可能是input元素,也可能是flash. pick : { id : $scope.upload.id, // 这个id是你要点击上传文件的id,自己设置就好</span> multiple : true }, // 不压缩image, 默认如果是jpeg,文件上传前会压缩一把再上传! resize : true, dnd:$scope.upload.droparea, auto : true, // 上传并发数 threads : 5, // 开启分片上传 chunked : true, chunkSize : 1 * 1024 * 1024, duplicate :true }); // // 声明WebUploader内【uploadBeforeSend】事件 // uploader.on("beforeFileQueued", function(file) { // if(!$scope.upload.isupload){ // $$alert("请选择文件夹",3); // return false; // } // }); // 声明WebUploader内【uploadBeforeSend】事件 uploader.on("fileQueued", function(block, data) { if($scope.upload.tip){ } $scope.upload.length++; // wenbuploader添加携带参数 }); // 声明WebUploader内【uploadBeforeSend】事件 uploader.on("uploadBeforeSend", function(block, data) { // wenbuploader添加携带参数 console.log($scope.upload.md5); data.fileMd5 = $scope.upload.md5; }); // 声明WebUploader内【uploadSuccess】事件 uploader.on("uploadSuccess", function(file, response) { $scope.upload.data.push(response[0]); $scope.upload.length--; if($scope.upload.length==0){ $scope.$emit('upload', $scope.upload.data); $scope.upload.data=[]; } }); } }; return option; }); //启动应用程序 angular.bootstrap(document,['lx.upload']); </script> </html>
后端
@POST @Path("/upload") @Produces({ MediaType.APPLICATION_JSON + ";charset=UTF-8" }) public String upload(@Context HttpServletRequest request) throws UnsupportedEncodingException { request.setCharacterEncoding("UTF-8"); // 获取或设置md5值 String nFileMd5 = null; // 获取或设置分片数值 String nChunk = "0"; // 文件地址拿去到配置中 File dir = new File(WebConfig.MAIN_UPLOAD_PATH); if (!dir.exists()) { if (!dir.mkdirs()) { throw new RuntimeException("Directory " + WebConfig.MAIN_UPLOAD_PATH + " not exists and can not create directory."); } } File nDirCACHE_PATH = new File(WebConfig.MAIN_UPLOAD_CACHE_PATH); if (!nDirCACHE_PATH.exists()) { if (!nDirCACHE_PATH.mkdirs()) { throw new RuntimeException("Directory " + WebConfig.MAIN_UPLOAD_CACHE_PATH + " not exists and can not create directory."); } } // 验证上传内容了类型 String contentType = request.getContentType(); if ((contentType.indexOf("multipart/form-data") >= 0)) { DiskFileItemFactory factory = new DiskFileItemFactory(); // 设置内存中存储文件的最大值 factory.setSizeThreshold(WebConfig.MAIN_UPLOAD_MAXSIZE); factory.setSizeThreshold(WebConfig.MAIN_UPLOAD_MEMORY_THRESHOLD); // 设置缓存路径 factory.setRepository(new File(WebConfig.MAIN_UPLOAD_CACHE_PATH)); // 创建一个新的文件上传处理程序 ServletFileUpload upload = new ServletFileUpload(factory); // 设置最大上传的文件大小 upload.setFileSizeMax(WebConfig.MAIN_UPLOAD_MAXSIZE); upload.setSizeMax(WebConfig.MAIN_UPLOAD_MAX_REQUEST_SIZE); try { // 解析获取的文件 List<FileItem> formItems = upload.parseRequest(request); for (FileItem file : formItems) { if (file.isFormField()) { String fieldName = file.getFieldName(); if (fieldName.equals("fileMd5")) { // 10.2.1.获取md5值 nFileMd5 = file.getString("utf-8"); } if (fieldName.equals("chunk")) { // 10.2.2.获取分片数值 nChunk = file.getString("utf-8"); } } else { Map<String, Object> nFileMap = new HashMap<String, Object>(); String nFileName = file.getName(); File nFile = new File(WebConfig.MAIN_UPLOAD_PATH + File.separator + nFileMd5); if (!nFile.exists()) { nFile.mkdir(); } file.write(new File(WebConfig.MAIN_UPLOAD_PATH + File.separator + nFileMd5 + File.separator + nChunk)); if (file.isInMemory()) { file.delete(); } } } } catch (Exception e) { e.printStackTrace(); } } return ""; }
ending 附件带示例
发表评论
-
Jersey RESTful WebService框架学习(九)读取图片显示
2018-10-20 11:35 1401后端代码: import java.io.File; im ... -
Angularjs自定义指令计算浏览器高度
2018-03-27 21:51 913<!DOCTYPE html> <html ... -
AngularJS封装webupload实现文件夹上传
2018-03-14 00:11 1825百度的webupload没有开放a ... -
滚动条滚动到底部触发事件
2018-03-13 18:22 11我们在做开发时,会出现内部滚动条,滚动加载数据的情况。 &l ... -
jquery监听滚动条
2018-03-05 14:40 945$(".lx").scroll(func ... -
Jersey RESTful WebService框架学习(八)文件下载防乱码
2018-01-28 14:07 1257最近在做下载时候 不同浏览器下载的文件一直出现乱码,不知道怎 ... -
AngularJS封装UEditor
2018-01-09 18:35 905<!DOCTYPE HTML> <html ... -
Angularjs的directive封装ztree
2017-12-16 13:41 1282一般我们做web开发都会用到树,恰好ztree为我们提供了多种 ... -
Jersey RESTful WebService框架学习(八)maven搭建
2017-11-26 16:30 1297一、pom文件: <project xmlns=&quo ... -
Jersey RESTful WebService框架学习(七)文件上传
2017-11-26 15:31 1712引入jar包:jersey-media-multipart-2 ... -
Jersey RESTful WebService框架学习(六)接收MultivaluedMap类型参数
2017-11-25 19:05 3502现在的web开发中有些工程会觉得实体bean的架构会比较重,现 ... -
Jersey RESTful WebService框架学习(五)使用@BeanParam
2017-11-24 21:36 4276第一步:定义一个实体类 注意:实体类的属性需要加上FormPa ... -
Jersey RESTful WebService框架学习(四)使用@FormParam
2017-11-24 21:19 1331前端 <form action="/Jerse ... -
Jersey RESTful WebService框架学习(三)使用@QueryParam
2017-11-22 12:50 1339介绍:@QueryParamuri路径请求参数写在方法的参数中 ... -
Jersey RESTful WebService框架学习(二)使用@PathParam
2017-11-21 13:20 1349@PathParamuri路径参数写在方法的参数中,获得请求路 ... -
AngularJS实战之cookie的读取
2017-11-21 12:53 1020<!DOCTYPE html> <html ... -
Jersey RESTful WebService框架学习(一)
2017-11-19 23:54 1639介绍:RESTful (Representation Stat ... -
AngularJS中$interval和$timeout的使用
2017-11-18 12:49 1232我们在项目中会出现定时刷新,延迟加载等多种场景。 接下来就看$ ... -
AngularJS实战之ngAnimate插件实现轮播
2017-11-08 21:44 1696第一步:引入angular-animate.js 第二步:注 ... -
基于Angular-animate.js和css实现的轮播图
2017-11-08 13:11 44<!DOCTYPE html> <html ...
相关推荐
【标题】"Jersey RESTful WebService框架学习(一)" 在Web服务开发中,RESTful API已经成为主流,它强调资源的表示和交互,通过HTTP协议进行通信。Jersey是Java平台上的一个开源框架,专门用于构建RESTful服务,它是...
在本篇中,我们将深入探讨如何使用Maven搭建一个基于Jersey实现的RESTful Web服务。Jersey是Java EE平台下的一个开源项目,它提供了对JAX-RS(Java API for RESTful Web Services)规范的全面支持,让我们能够轻松...
7. **测试**:Jersey 提供了测试框架,允许你编写单元测试和集成测试,以确保 RESTful 服务按预期工作。 8. **扩展性**:Jersey 允许通过 SPI(Service Provider Interface)添加自定义功能,如拦截器、消息处理器...
**标题:“jersey restful webservice集成以及使用”** RESTful Web服务是一种广泛采用的Web服务设计风格,它遵循 Representational State Transfer(表述性状态转移)原则,通过HTTP协议提供服务。Jersey是Java...
【基于Jersey搭建WebService框架】 在Java开发中,构建RESTful Web服务时,Jersey是一个常用的框架。它作为Java EE的一部分,提供了实现 Representational State Transfer (REST) 架构风格的工具集。本教程将围绕...
总结来说,"Jersey RESTful Webservice"项目提供了一个实际运行的示例,展示了如何使用Jersey框架构建RESTful服务。通过学习这个项目,开发者可以深入理解RESTful服务的原理,以及如何在Java环境中使用Jersey进行...
Jersey 是一个开源的、基于Java的RESTful Web服务实现框架,它允许开发者轻松地创建和部署RESTful服务。REST(Representational State Transfer)是一种网络应用程序的设计风格和开发方式,强调通过HTTP协议来操作...
SOAP Web服务和RESTful Web服务是两种常见的Web服务交互方式,它们在设计理念、协议复杂度、数据格式和操作方式等方面存在显著的区别。 首先,SOAP(简单对象访问协议)是一种基于XML的协议,它允许不同系统之间的...
RESTful WebService是比基于SOAP消息的WebService简单的多的一种轻量级Web服务,RESTful WebService是没有状态的,发布和调用都非常的轻松容易。 下面写一个最简单的Hello World例子,以便对RESTful WebService有...
SpringBoot+Mybatis+CXF框架,实现Restful api与 WebService api接口的大实验 本实验的主要目标是使用SpringBoot、Mybatis和CXF框架来实现Restful API和WebService API接口的大实验。下面是实验的详细介绍: 标题...
Spring MVC作为Java领域最流行的Web框架之一,提供了强大的支持来实现RESTful服务。这篇博客"restful webservice in springMVC Demo"旨在展示如何在Spring MVC中创建RESTful Web服务,并通过客户端进行调用。 首先...
"Eclipse中使用Jersey和Tomcat构建RESTful WebService及其调用" RESTful Web服务简介 ----------------- RESTful Web服务是使用HTTP和REST原理实现的Web服务。REST 中最重要的概念是资源(resources),使用全球ID...
### Jersey和Tomcat构建RESTful WebService #### RESTful Web服务简介 REST(Representational State Transfer)是由HTTP规范1.0和1.1版的主要作者之一Roy Fielding在其2000年的博士论文中提出的。REST的核心思想...
本项目是使用Jersey框架和Tomcat服务器来构建RESTful WebService的一个实例,它提供了完整的配置和实现,对于学习和理解RESTful服务的开发具有很高的实用价值。 **Jersey框架**:Jersey是Java平台上的一个开源框架...
Java restful和webservice接口, WebService有两种方式,一是SOAP方式,二是REST方式。SOAP是基于XML的交互,WSDL也是一个XML文档,可以使用WSDL作为SOAP的描述文件;REST是基于HTTP协议的交互,支持JSON、XML等交互...
在Web服务领域,RESTful已经成为构建可扩展、高性能和易于理解的API的标准方法。本资料集主要针对想要深入理解和实践RESTful风格的开发者。 首先,理解REST的核心概念至关重要。REST是一种架构风格,其核心思想是将...
在IT行业中,RESTful Web Service和Spring框架的集成是一个广泛使用的解决方案,特别是在构建现代、可扩展的分布式系统中。REST(Representational State Transfer)是一种网络应用程序的设计风格和开发方式,基于...
用CXF开发RESTful风格WebService.doc
本教程将深入探讨如何在Spring环境中集成CXF以实现RESTful WebService接口。 首先,我们需要理解REST(Representational State Transfer)的概念。REST是一种软件架构风格,用于设计网络应用程序。它的核心思想是...