dojo小例子(17)iframe上传文件到rest后台,以及乱码问题解决
来源:互联网 发布:daxulu域名更换 编辑:程序博客网 时间:2024/05/02 01:38
1、上传文件的form必须是multipart/form-data类型。form里有一个文本框,值是中文“图片”,还有一个Uploader,主要是为了要他的dojo样式
<div id="theForm" data-dojo-type="dijit/form/Form" method="post" enctype="multipart/form-data" ><input id="name" data-dojo-type="dijit/form/TextBox" name="name" value="图片"/><input id="idupfile" id="idupfile" data-dojo-type="dojox/form/Uploader" data-dojo-props="showInput:'before'" name='upfile' label="select" /><button id="sbt" data-dojo-type="dijit/form/Button" type="button" onclick="handler()">submit</button><button data-dojo-type="dijit/form/Button" type="reset" >reset</button></div>可以用这两个css参数调整Uploader的样式:
.dijitUploadDisplayInput {font-size: 12px;width:100px;}.dijitButtonText{font-size: 12px;}
iframe(url, { form: "theForm", // form id data: { // 由于汉字提交到后台会出现乱码,所以先编码 color: encodeURI("汉字"), name: encodeURI("图片") }, timeOut: 20000, handleAs: "json" // 反馈数据的处理方式是json}).then(function(r) { console.log(r);}, function(error) { console.log(error);});做一些说明,其实 form: "theForm" 就已经把整个form(文件以及文本框的汉字)都提交到后台了,但是这种方式提交到后台的汉字是乱码的。所以又用
data: { // 由于汉字提交到后台会出现乱码,所以先编码 color: encodeURI("汉字"),// 额外增加的一个值 name: encodeURI("图片")// 会覆盖原form中的name },把文本框的值单拿出来,编码,而且最后提交的是编码后的值,也就是把之前的覆盖了。
另外,还有一种解决提交时乱码问题的办法,就是把name附加到url后面“url?name=”+name
还有一点需要注意,form提交后,文本框的值被encodeURI("图片")的值所替换,所以需要在提交前,把文本框的值暂存一下,提交后再set进去。
3、rest后台是如何处理multipart/form-data类型的form的呢
引入resteasy-multipart-provider-2.3.3.Final.jar
import org.jboss.resteasy.annotations.providers.multipart.MultipartForm;
@POST@Path("/putImgForm")@Consumes(MediaType.MULTIPART_FORM_DATA)@Produces(MediaType.TEXT_HTML)public String putImgForm(@MultipartForm Image form) throws IOException{页面必须是post类型才能上传文件,所以后台也对应使用@POST声明。这个方法的json返回值必须是被<textarea></textarea>所包裹,而且方法必须声明为@Produces(MediaType.TEXT_HTML),返回值才能被iframe的handleAs: "json"正确解析。返回值的形式:
return "<textarea>{\"hello\": \"world\"}</textarea>";Image是一个pojo类:
import org.jboss.resteasy.annotations.providers.multipart.PartType; public class Image {@FormParam("name")private String imageName ;@FormParam("upfile") @PartType("image/gif") private byte[] image;@FormParam("color")private String color;
通过这样一系列声明处理,form中的文件以及文本框值就对应到了Image的实例当中。
因为页面对form中的值进行了编码,后台还需进行相应解码
java.net.URLDecoder.decode(form.getImageName(),"UTF-8")
至此,就实现了文件上传功能,还对乱码进行了处理。
0 0
- dojo小例子(17)iframe上传文件到rest后台,以及乱码问题解决
- php文件上传后台存储中文乱码问题解决方案
- Jsp Servlet +SmartUpload 实现文件上传.以及上传乱码问题解决.
- dojo小例子(16)Grid cell里显示图片,图片取自rest
- 上传文件到服务器例子,包括前端后台一整套
- 上传jar文件到AIX系统乱码问题解决
- Apache CXF REST 文件上传,中文乱码(已解决)
- 利用php以及dojo,完成文件上传
- java上传文件乱码问题解决
- 文件上传 通过隐藏iframe的方式来实现ajax上传文件并返回处理结果 ie乱码问题解决
- Struts1 文件上传小例子
- PHP上传文件小例子
- struts 上传文件乱码问题解决方法
- OpenSolaris 文件上传文件名乱码问题解决
- 文件上传 FileItem 中文乱码问题解决
- HttpClient上传文件到微信素材乱码问题解决
- REST服务Post创建以及调用小例子
- REST的小例子
- 训练赛 Grouping(强连通分量缩点 + DAG求最长路)
- IOS中获取各个文件的目录路径的方法和NSFileManager类
- 欧拉函数
- jdbc连接SQL Server——非常简单,只需3步
- 读mybatis源码之十四:mybatis事务处理
- dojo小例子(17)iframe上传文件到rest后台,以及乱码问题解决
- struts关于多个时间需要转换
- 程序员技术练级攻略
- C语言几点说明
- RedHat Linux下安装JDK1.7报错Permission denied
- 决策树算法原理及JAVA实现(ID3)
- OnlineJudge框架编写日志
- 快速排序1 升序
- inline函数和一般的函数有什么不同