转:upload.parseRequest为空

FileItemFactory factory = new DiskFileItemFactory();  
ServletFileUpload upload = new ServletFileUpload(factory);  
upload.setHeaderEncoding("UTF-8");  
List items = upload.parseRequest(request);   

上传是items一直是空list。导致原因是struts2把原始的原来S2为简化上传功能,把所有的enctype="multipart/form-data"表单做了wrapper最后把HttpServletResquest封装成 org.apache.struts2.dispatcher.multipart.MultiPartRequestWrapper 怪不得我的 ServletFileUpload.parseRequest(request)不行!!! 

看我怎么改!废话不多说,直接贴代码

 
    1. MultiPartRequestWrapper wrapper = (MultiPartRequestWrapper) request;   
    2.         File file = wrapper.getFiles("imgFile")[0];   
    3.         String fileName = wrapper.getFileNames("imgFile")[0];  
    4.         //检查文件大小  
    5.         if(file.length() > maxSize){  
    6.             String temStr= "上传文件大小超过限制。";  
    7.             this.writeResponse(response, temStr);  
    8.             return;  
    9.         }  
    10.         //检查扩展名  
    11.         String fileExt = fileName.substring(fileName.lastIndexOf(".") + 1).toLowerCase();  
    12.         if(!Arrays.<String>asList(extMap.get(dirName).split(",")).contains(fileExt)){  
    13.             String temStr= "上传文件扩展名是不允许的扩展名。\n只允许" + extMap.get(dirName) + "格式。";  
    14.             this.writeResponse(response, temStr);  
    15.             return;  
    16.         }  
    17.   
    18.         SimpleDateFormat df = new SimpleDateFormat("yyyyMMddHHmmss");  
    19.         String newFileName = df.format(new Date()) + "_" + new Random().nextInt(1000) + "." + fileExt;  
    20.   
    21.         try {    
    22.             InputStream in = new FileInputStream(file);    
    23.             File uploadFile = new File(savePath, newFileName);    
    24.             OutputStream out = new FileOutputStream(uploadFile);    
    25.             byte[] buffer = new byte[1024 * 1024];    
    26.             int length;    
    27.             while ((length = in.read(buffer)) > 0) {    
    28.                 out.write(buffer, 0, length);    
    29.             }    
    30.     
    31.             in.close();    
    32.             out.close();    
    33.         } catch (FileNotFoundException ex) {    
    34.             ex.printStackTrace();    
    35.         } catch (IOException ex) {    
    36.             ex.printStackTrace();    
    37.         }    

转载于:https://www.cnblogs.com/blueherb/p/3998583.html

07-07 16:09:47.323 dump_pyprocess_info [INFO] proc_data:{'15256': ['"python" D:\\DeviceTestTools\\device-tools-agent\\agent_main.py\r\r'], '11696': ['"python" D:\\DeviceTestTools\\tAgent\\product_execute\\app.py\r\r'], '6632': ['"D:\\DeviceTestTools\\python\\python.exe" "-c" "from multiprocessing.spawn import spawn_main; spawn_main(parent_pid=15256, pipe_handle=2276)" "--multiprocessing-fork"\r\r'], '16228': ['python D:\\Local\\DeviceTest\\20250707160716_c385\\icsv100_changan_c385\\devicetest\\agent\\ics_tep.py -p 18441\r\r']}.返回值是True 07-07 16:09:48.142 start_timer [INFO] 等待指令开启计时器 07-07 16:09:49.154 start_timer [INFO] 等待指令开启计时器 07-07 16:09:50.103 handle_message [INFO] handle_message recv uri: /tepmanager/hutaf-tc/v1/complete 07-07 16:09:50.103 report_end [INFO] --->> report end start 07-07 16:09:50.103 report_end [INFO] 框架异常上报用例块消息 07-07 16:09:50.118 report_end [INFO] response's headers: {'request_id': '1751875790104'} 07-07 16:09:50.118 report_end [INFO] response's body: {'retcode': '0', 'status': 'OK'} 07-07 16:09:50.165 start_timer [INFO] 等待指令开启计时器 07-07 16:09:50.949 dump_pyprocess_info [INFO] proc_data:{'15256': ['"python" D:\\DeviceTestTools\\device-tools-agent\\agent_main.py\r\r'], '11696': ['"python" D:\\DeviceTestTools\\tAgent\\product_execute\\app.py\r\r'], '6632': ['"D:\\DeviceTestTools\\python\\python.exe" "-c" "from multiprocessing.spawn import spawn_main; spawn_main(parent_pid=15256, pipe_handle=2276)" "--multiprocessing-fork"\r\r'], '16228': ['python D:\\Local\\DeviceTest\\20250707160716_c385\\icsv100_changan_c385\\devicetest\\agent\\ics_tep.py -p 18441\r\r']}.返回值是True 07-07 16:09:51.179 start_timer [INFO] 等待指令开启计时器 07-07 16:09:52.184 start_timer [INFO] 等待指令开启计时器 07-07 16:09:53.129 _ticcReportExecutorEnd [INFO] wait for ics_tep check finished!!! 07-07 16:09:53.129 _ticcReportExecutorEnd [INFO] ABNORMAL DEVICES: None 07-07 16:09:53.129 _ticcReportExecutorEnd [INFO] acquire lock 07-07 16:09:53.129 _ticcReportExecutorEnd [INFO] release lock 07-07 16:09:53.129 uploadTestCaseResult [INFO] acquire lock 07-07 16:09:53.130 uploadTestCaseResult [INFO] 测试用例:TC_RJSJ_TF001_FUNC001_006 07-07 16:09:53.130 uploadTestCaseResult [INFO] 执行结果:Blocked 07-07 16:09:53.130 uploadTestCaseResult [INFO] 失败原因:用例框架异常,环境配置解析适配,执行结束, If you use `@root_validator` with pre=False (the default) you MUST specify `skip_on_failure=True`. Note that `@root_validator` is deprecated and should be replaced with `@model_validator`. For further information visit https://errors.pydantic.dev/2.5/u/root-validator-pre-skip 07-07 16:09:53.130 notify_upload_log [INFO] D:\Local\ATLog\task_5569419\block_4909218091701174272_1\agent.log 路径是agent日志,不是用例日志。 07-07 16:09:53.130 _ticcReportCaseResult [INFO] ------------------------- uploadTestCaseResult Start 07-07 16:09:53.131 _ticcReportCaseResult [INFO] 上报用例的执行结果 07-07 16:09:53.132 _ticcReportCaseResult [INFO] upload result's url: https://apigw-cn-south.huawei.com/api/apigateway/tengwu/vtest/testcase-result 07-07 16:09:53.132 _ticcReportCaseResult [INFO] upload result's headers: {'request_id': '1751875793132'} 07-07 16:09:53.132 _ticcReportCaseResult [INFO] upload result's body: {'runTaskId': '5569419', 'blockId': '4909218091701174272', 'product': '253129109', 'number': 'TC_RJSJ_TF001_FUNC001_006', 'startTime': 1751875793131, 'finishTime': 1751875793131, 'result': '4', 'resultInfo': '用例框架异常,环境配置解析适配,执行结束, If you use `@root_validator` with pre=False (the default) you MUST specify `skip_on_failure=True`. Note that `@root_validator` is deprecated and should be replaced with `@model_validator`.\n\nFor further information visit https://errors.pydantic.dev/2.5/u/root-validator-pre-skip', 'uri': '/02ire0fuv8g/07190vfuhi848/07k7105qtqtf4/07k7105qtqtgc/07lb105qu1rlvu7g/07l9106lgd2p282o/07l9106lgd2pm82p/07l9106lgd2qn82r/07l9106lgd2s182v/', 'localLogPath': 'D:\\Local\\ATLog\\task_5569419\\block_4909218091701174272_1\\agent.log', 'executeTeIp': '10.39.85.66'} 07-07 16:09:53.191 start_timer [INFO] 等待指令开启计时器 07-07 16:09:53.373 _ticcReportCaseResult [INFO] upload result's response: (200, {'Server': 'API-Gateway', 'Date': 'Mon, 07 Jul 2025 08:09:53 GMT', 'Content-Length': '0', 'Connection': 'keep-alive', 'Trace-Id': 'e4379b6bcf00463d88635ddc5f3481ef', 'jalor-jwt-verify': 'true', 'Vary': 'Access-Control-Request-Headers', 'Gateway-Version': '6.6.8.0.RELEASE', 'Gateway-Env': 'tengwu-prod', 'Time-Trace': 'b60f1c58-42093528,pro-gw(184.198/55099)-apig1-Route2-lb2-jwt2-server(210.146/61339-200)15-sum15', 'X-Server-Process-Time': '0.0169', 'X-Upstream-Process-Time': '0.0169', 'X-ALB-SERVER': 'ALB'}, '') 07-07 16:09:53.373 _ticcReportCaseResult [INFO] 成功上报用例的执行结果 07-07 16:09:53.373 _ticcReportCaseResult [INFO] 还有0条用例待上报 07-07 16:09:53.373 _ticcReportCaseResult [INFO] ------------------------- uploadTestCaseResult End 07-07 16:09:53.374 notify_upload_other_log [INFO] 上传的本地日志路径是:D:\Local\ATLog\task_5569419\block_4909218091701174272_1\agent.log\TC_RJSJ_TF001_FUNC001_006 07-07 16:09:53.374 uploadTestCaseResult [INFO] 开启线程上传所有日志到NAS 07-07 16:09:53.374 notify_upload_other_log [INFO] D:\Local\ATLog\task_5569419\block_4909218091701174272_1\agent.log\TC_RJSJ_TF001_FUNC001_006,路径在执行机上不存在 07-07 16:09:53.374 uploadTestCaseResult [INFO] release lock 07-07 16:09:53.374 _ticcReportExecutorEnd [INFO] 最后一个用例的执行结果非PASS,再次检测设备状态,隔离异常设备 07-07 16:09:53.375 _ticcReportExecutorEnd [INFO] kill tep.py process, pid: 16228 07-07 16:09:53.474 _ticcReportExecutorEnd [INFO] kill tep.py process done 07-07 16:09:53.474 _ticcReportExecutorEnd [INFO] ------------------------- reportExecutorCmdEnd Start 07-07 16:09:53.680 _ticcReportExecutorEnd [INFO] report executor end's url: https://apigw-cn-south.huawei.com/api/apigateway/tengwu/vtest/testcase-block-result 07-07 16:09:53.680 _ticcReportExecutorEnd [INFO] report executor end's headers: {'request_id': '1751875793475'} 07-07 16:09:53.680 _ticcReportExecutorEnd [INFO] report executor end's body: {'runTaskId': '5569419', 'blockId': '4909218091701174272', 'environmentId': 'SDE-0aab505dd5184039a86ba5461c00211c', 'result': '0', 'failCaseReExecute': False} 07-07 16:09:53.680 _ticcReportExecutorEnd [INFO] response : (200, {'Server': 'API-Gateway', 'Date': 'Mon, 07 Jul 2025 08:09:53 GMT', 'Content-Length': '0', 'Connection': 'keep-alive', 'Trace-Id': 'dfcdf1a070c74aea9a95505dadb2b82d', 'jalor-jwt-verify': 'true', 'Vary': 'Access-Control-Request-Headers', 'Gateway-Version': '6.6.8.0.RELEASE', 'Gateway-Env': 'tengwu-prod', 'Time-Trace': 'b6d40755-42093544,pro-gw(184.198/55099)-apig3-Route4-lb4-jwt5-server(211.72/63402-200)8-sum9', 'X-Server-Process-Time': '0.0099', 'X-Upstream-Process-Time': '0.0099', 'X-ALB-SERVER': 'ALB'}, '') 07-07 16:09:53.680 _ticcReportExecutorEnd [INFO] ------------------------- reportExecutorCmdEnd End 07-07 16:09:53.680 _ticcReportExecutorEnd [INFO] ------------------------- 开始手动下发stop消息 07-07 16:09:53.680 _ticcReportExecutorEnd [INFO] 手动下发停止消息到flask's url: http://127.0.0.1:8810/api/agent/v1/testcase-block-deliver-stop 07-07 16:09:53.680 _ticcReportExecutorEnd [INFO] 手动下发停止消息到flask's headers: {'request_id': '1751875793680'} 07-07 16:09:53.680 _ticcReportExecutorEnd [INFO] 手动下发停止消息到flask's body: {'groupId': '10.39.85.66:8810', 'runTaskId': '5569419'} 07-07 16:09:53.963 pull_up_ics_tep [INFO] 待执行用例列表为,任务下发用例已执行完毕,但是还有可能包含后置处理用例在执行! 07-07 16:09:53.963 pull_up_ics_tep [INFO] 已拉起框架,则以框架的report_end上报为准 07-07 16:09:53.963 pull_up_ics_tep [INFO] ics_tep stopped
最新发布
07-08
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值