NutzCN Logo
问答 文件上传权限不返回错误代码
发布于 3040天前 作者 qq_d6c9c504 2118 次浏览 复制 上一个帖子 下一个帖子
标签:

不知道是不是我自己的问题。。。代码如下

@AdaptBy(type = UploadAdaptor.class, args = {"ioc:imageUpload"})
	@POST
	@At("/uploadImage/?")
	@Ok("json")
	@RequiresPermissions("wx.material.image.add")
	//AdaptorErrorContext必须是最后一个参数
	@SLog(tag = "上传图片", msg = "图片名称:${args[1].meta.fileLocalPath}")
	public Object uploadImage(String wxid, @Param("Filedata") TempFile tf, HttpServletRequest req, AdaptorErrorContext err) {
		try {
			if (err != null && err.getAdaptorErr() != null) {
				return NutMap.NEW().addv("code", 1).addv("msg", "文件不合法");
			} else if (tf == null) {
				return Result.error("空文件");
			} else {
				WxApi2 wxApi2 = wxConfigService.getWxApi2(wxid);
				WxResp resp = wxApi2.add_material("image", tf.getFile());
				if (resp.errcode() != 0) {
					return Result.error(resp.errmsg());
				}

通过跟踪请求发现,如果没有权限,去冲定向了

Request URL:http://127.0.0.1:8080/nutzwk/private/wx/image/uploadImage/5d66443f8bd94f3db9e84b6aa5798ac2
Request Method:POST
Status Code:302 Found
Remote Address:127.0.0.1:8080
Response Headers
view source
Content-Length:0
Date:Fri, 26 Aug 2016 09:46:46 GMT
Location:http://127.0.0.1:8080/nutzwk/private/login
Server:Jetty(9.2.17.v20160517)
X-Powered-By:nutz/1.r.58-SNAPSHOT <nutzam.com>

而不是返回
{"code":1,"msg":"没有权限"}

17 回复

访问其他没有权限的路径时, 也是302吗?

哦, 我可能知道了. 判断是否为ajax请求的地方,可能没考虑到文件上传

访问其他权限返回的是200,返回{"code":1,"msg":"没有权限"}

@wendal 兽总,能修复下吗?不然点上传按钮照样上传,然后也不提示错误,用户体验不算很友好

用的是啥上传库, 把header贴一下

@wendal

 $(function () {
        initDatatable();
        $('#file_upload').uploadifive({
            'auto': true,
            'multi': true,
            'buttonText': '+上传图片',
            'fileType': 'image/*',
            'fileSizeLimit': '2M',
            'queueSizeLimit': 6,
            'formData': {},
            'removeCompleted':true,
            'queueID': 'queue',
            'uploadScript': '${base}/private/wx/image/uploadImage/${wxid!}',
            'onUploadComplete': function (file, data) {
                if (data.code == 0) {
                    Toast.success(data.msg);
                    datatable.ajax.reload(null,false);
                } else {
                    Toast.error(data.msg);
                }
            },
            'onSelect' : function(queue) {
            }
        });
    });

http://www.uploadify.com/ 这个库,对吧

暂时没找到如何自定义header,它并没有像jquery那样设置一个header, 所以呢, NutShiroProcessor 中调用NutShiro.isAjax的时候返回false了

@wendal 是这个库,我抓的请求头

Request URL:http://127.0.0.1:8080/nutzwk/private/wx/image/uploadImage/5d66443f8bd94f3db9e84b6aa5798ac2
Request Method:POST
Status Code:302 Found
Remote Address:127.0.0.1:8080
Response Headers
view source
Content-Length:0
Date:Fri, 26 Aug 2016 10:10:30 GMT
Location:http://127.0.0.1:8080/nutzwk/private/login
Server:Jetty(9.2.17.v20160517)
X-Powered-By:nutz/1.r.58-SNAPSHOT <nutzam.com>
Request Headers
view source
Accept:*/*
Accept-Encoding:gzip, deflate
Accept-Language:zh-CN,zh;q=0.8,en;q=0.6
Connection:keep-alive
Content-Length:1724001
Content-Type:multipart/form-data; boundary=----WebKitFormBoundaryxQ0babW3OAHmBaYN
Cookie:sid=c721b76c-7aad-4c61-a137-0439239d917f; _ga=GA1.1.183887396.1439970387; sid=4aa3a8a4-1aef-4a89-87af-1c39124e146e
Host:127.0.0.1:8080
Origin:http://127.0.0.1:8080
Referer:http://127.0.0.1:8080/nutzwk/private/wx/image/index
User-Agent:Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/52.0.2743.116 Safari/537.36
Request Payload
------WebKitFormBoundaryxQ0babW3OAHmBaYN
Content-Disposition: form-data; name="Filedata"; filename="永无止境.png"
Content-Type: image/png

------WebKitFormBoundaryxQ0babW3OAHmBaYN--

@qq_d6c9c504 这header跟普通的浏览器请求无异,好坑爹 给nutzwk报个issue吧,跟大鲨鱼讨论一下怎么改

来自炫酷的 NutzCN

@wendal 好,怎么联系大鲨鱼呢?

@wendal 报issue地址是什么?直接上git上增加?好像没权限吧

@Wizzercn 你好,我修改了js没用,在uploadifive文件夹下还有一个jquery.uploadifive.min.js这个文件的方法,这个文件也需要修改下吗?

@qq_d6c9c504 看看引用了哪个嘛,min版的js基本上没法改

来自炫酷的 NutzCN

添加回复
请先登陆
回到顶部