struts2的ajax提交表单文件,Struts2 文件上传 对XHR的请求 (ajax + formData 上传的文件) 拿不到文件...

Struts2 对文件上传是通过 file upload 拦截器实现的,具体引入方法见这里。然而 File Upload 拦截器似乎对于 XHR 过来的文件上传请求无法响应。

MMP老子试了半天。

用ajax + formData 的方式 文件能传出去(在浏览器HTTP请求中能看到)

HTML:

JS:

$("#uploadBtn").click(function () {

var formData = new FormData();

formData.append("upload", $("#file").get(0).files[0]);

jQuery.ajax({

enctype: 'multipart/form-data',

url: '/json/blackWhiteLimit/fileUpload.action',

type: "post",

data: formData,

processData: false,//用于对data参数进行序列化处理 这里必须false

contentType: false, //必须

success: function (json) {

alert("返回数据了" + json);

}

});

});

后端:Action

public class BlackWhiteLimitAction extends BaseAction {

private File upload; // 上传上来的文件(和前端input框中的name值相对应)

private String uploadFileName; // 上传上来文件的文件名(Struts2固定写法XXXFileName)

private String uploadContentType; // 上传上来的文件的文件类型(Struts2固定写法XXXContentType)

// 省略getter Setter

/**

* 文件上传服务

*

* @return

*/

public String fileUpload() {

System.out.println("*******************进入方法****************");

try {

// 校验

if (upload == null || uploadFileName == null || uploadContentType == null) {

fileUrlJson = "error:没有成功上传文件,请重新选择上传";

return "fileUrlResult";

}

File file = getUpload(); // 拿到前台传过来的文件

String fileName = getUploadFileName(); // 拿到文件名

System.out.println("fileName:" + fileName);

// 逻辑省略.....

fileUrlJson = "success"; // 返回成功

return "fileUrlResult";

} catch (Exception e) {

log.error("BlackWhiteLimitAction.fileUpload出现异常:" + e);

fileUrlJson = "error"; // 返回失败

return "fileUrlResult";

}

}

拦截器配置这里没展示,(因为有些隐晦)想看可以自己搜索拦截器配置

就这样上传struts2 死活那不到文件

同样的后端代码,我用from 表单提交就能拿到。用ajax + fromData 就不行

也有人遇到了同样的问题 传送门

Struts2 对文件上传是通过 file upload 拦截器实现的,具体引入方法见这里。然而 File Upload 拦截器似乎对于 XHR 过来的文件上传请求无法响应,具体原因未去探究。也希望知道的人给个提示,谢谢。

解决方式:

用:jquery.form.min.js

:TODO 回家

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值