postman发送请求后程序报错
问题描述:
问题描述: java.lang.NullPointerException: null at java.io.File.<init>(File.java:277) ~[na:1.8.0_301] at com.shopping.demo.controller.ProductAdminController.uploadFile(ProductAdminController.java:41) ~[classes/:na]
相关代码:
@PostMapping("/upload/file") public ApiResponse uploadFile(@RequestParam("file") MultipartFile file,HttpServletRequest request){ String filename = file.getOriginalFilename();//原始名字 String substring = filename.substring(filename.lastIndexOf(".")); //生成文件名称uuid UUID uuid = UUID.randomUUID(); String newFilename=uuid.toString()+substring; //创建文件 File fileDirectory = new File();//创建文件夹 File destFile = new File(Constants.FILE_UPLOAD_DIR + newFilename);//创建文件 //判断文件夹是否存在 if (!fileDirectory.exists()) { //判断文件夹创建是否成功 if(!fileDirectory.mkdir()){ throw new ShoppingException(ApiResponseEnum.MKDIR_FAIL); } } try { //把要上传的图片保存到创建的文件中 file.transferTo(destFile); } catch (IOException e) { e.printStackTrace(); throw new ShoppingException(ApiResponseEnum.MKDIR_FAIL); } try { //返回一个含有ip端口文件名的完整路径 return new ApiResponse().put("url",getHost(new URI(request.getRequestURL()+""+"/images/"+newFilename))); } catch (URISyntaxException e) { throw new ShoppingException(ApiResponseEnum.IMAGES_UPLOAD_FAIL); } } //获取当前的ip端口 private URI getHost(URI uri){ URI effectedUri; try { effectedUri=new URI(uri.getRawSchemeSpecificPart(),uri.getUserInfo(),uri.getHost(),uri.getPort(),null,null,null); } catch (URISyntaxException e) { effectedUri=null; } return effectedUri; }
相关代码:
@Configuration public class SpringBootWebMvcConfig implements WebMvcConfigurer { @Override public void addResourceHandlers(ResourceHandlerRegistry registry) { registry.addResourceHandler("/images/**") .addResourceLocations("file:"+Constants.FILE_UPLOAD_DIR); } }
相关代码:
file.upload.dir=D:/upload/
相关代码:
@Component public class Constants { public static final String STRING_MIN="6"; public static final String STRING_MAX="12"; public static final String ROLE_USER="1"; public static final String ROLE_ADMIN="2"; public static final String JWT_TOKENS="jwt-token"; public static final String JWT_USERID="jwt_userId"; public static final String JWT_USERNAME="jwt_userName"; public static final String JWT_USER_ROLE="jwt_userRole"; public static String FILE_UPLOAD_DIR; @Value("${file.upload.dir}") public static void setFileUploadDir(String fileUploadDir) { FILE_UPLOAD_DIR = fileUploadDir; } public static String getFileUploadDir(){ return FILE_UPLOAD_DIR; } }
20
收起
正在回答
1回答
同学你好,1、建议同学去除方法前的静态关键字。如下所示:然后重新测试代码试一下。
2、测试代码在实例化File时未传递参数出现编译性异常,该问题可能是jdk版本的问题,如果同学未出现该问题请忽略。如果存在异常,则建议添加参数。如下所示:
3、上传成功后上传地址错误,如下所示:
建议URL第一个参数调用uri.getScheme()。如下所示:
祝学习愉快!
恭喜解决一个难题,获得1积分~
来为老师/同学的回答评分吧
0 星