加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

Jersey后端服务接收ajax前端的图片上传

发布时间:2020-12-15 21:07:41 所属栏目:百科 来源:网络整理
导读:近期的项目里需要在前端上传图片后端接收处理。前端JSP页面使用Ajax上传图片后端使用Jersey框架提供restful接口接收处理图片。 一、前端的处理 jsp页面中图片上传没有使用form表单而是直接使用file类型的input控件 inputtype="file"name="file"class="inpTxt

近期的项目里需要在前端上传图片后端接收处理。前端JSP页面使用Ajax上传图片后端使用Jersey框架提供restful接口接收处理图片。

一、前端的处理

jsp页面中图片上传没有使用form表单而是直接使用file类型的input控件

<inputtype="file"name="file"class="inpTxtA"value=""id="appLogo"/>
<inputclass="inpTxtA"value=""id="appID"/>

js中使用ajax处理文件上传

varformData=newFormData();//使用formData来上传数据
//content-Type是form-data类型
formData.append("appId",$("#appID").val());
formData.append("file",$("#appLogo")[0].files[0]);//取file类型input中的文件

$.ajax({
	method:"POST",url:"/apps/updateApp",timeout:10000,//超时时间设置单位毫秒
	crossDomain:true,async:false,headers:{
	"client-type":"platform"
	},dataType:"json",data:formData,contentType:false,//
	processData:false,//数据不做预处理
	success:function(response){
		alert(response.msg);
		return;
	},error:function(e){
		alert(response.msg);
		return;
	}
});


二、服务端处理

服务端使用jersey框架提供restful接口因为数据是以form-data的参数类型来传递的所以服务端接口中的参数类型要指定为@FormDataParam。

/**应用信息更新
*文件以InputStream类型上传
*文件描述信息以FormDataContentDisposition对象封装。
*/
@Path("updateApp")
@POST
@Consumes(MediaType.MULTIPART_FORM_DATA)
publicResponseupdateApp(@FormDataParam("file")InputStreaminputStream,@FormDataParam("file")FormDataContentDispositioncp,@FormDataParam("appId")StringappId){
Stringname=cp.getFileName();
try{
name=newString(name.getBytes("ISO-8859-1"),"UTF-8");
}catch(Exceptione){
result.put("errcode",1);
	result.put("msg","应用图标名称异常");
	returnJSONUtil.toJSONResponse(result);
}
...//进一步处理
}


三、可能出现的异常

1、在开发过程中前端对FormData的封装可能会出现问题提示invocation TypeError之类的异常。一般的原因是没有添加这两个参数

contentType:false,//
processData:false,//数据不做预处理

这两个参数申明不对数据做预处理。如果缺失那么前端在封装数据时会进行预处理比如x-www-form-urlencoded会将参数封装到url里面对于formData类型的数据预处理可能会出现封装异常。


2、后端服务接收参数时如果没有正确指定参数类型也可能会报如下异常

严重:AmessagebodyreaderforJavaclassjavax.servlet.http.HttpServletRequest,andJavatypeinterfacejavax.servlet.http.HttpServletRequest,andMIMEmedia
typemultipart/form-data;boundary=----WebKitFormBoundaryRJ7E8B7MDzDGjBHG
wasnotfound.
TheregisteredmessagebodyreaderscompatiblewiththeMIMEmediatypeare:
multipart/*->
com.sun.jersey.multipart.impl.MultiPartReaderServerSide
*/*->
com.sun.jersey.core.impl.provider.entity.FormProvider
com.sun.jersey.core.impl.provider.entity.MimeMultipartProvider
com.sun.jersey.core.impl.provider.entity.StringProvider

这是因为参数是以formData格式上传的如果接口中不指定参数类型为@FormDataParam则会出现上述异常提示。

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读