postman发送请求后程序报错

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;
    }
}


正在回答

登陆购买课程后可参与讨论,去登陆

1回答

同学你好,1、建议同学去除方法前的静态关键字。如下所示:然后重新测试代码试一下。

https://img1.sycdn.imooc.com//climg/621c6f0d09a4146406650223.jpg

2、测试代码在实例化File时未传递参数出现编译性异常,该问题可能是jdk版本的问题,如果同学未出现该问题请忽略。如果存在异常,则建议添加参数。如下所示:

https://img1.sycdn.imooc.com//climg/621c6f820961684f07290183.jpg

3、上传成功后上传地址错误,如下所示:

https://img1.sycdn.imooc.com//climg/621c6f94099b407210370117.jpg

建议URL第一个参数调用uri.getScheme()。如下所示:

https://img1.sycdn.imooc.com//climg/621c6fc309e1369a11370187.jpg

祝学习愉快!

问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师