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()。如下所示:

祝学习愉快!
2023版Java工程师
- 参与学习 人
- 提交作业 8791 份
- 解答问题 9886 个
综合就业常年第一,编程排行常年霸榜,北上广深月薪过万! 不需要基础,无需脱产即可学习,只要你有梦想,想高薪! 全新升级:技术栈升级(包含VUE3.0,ES6,Git)+项目升级(前后端联调与功能升级)
了解课程
恭喜解决一个难题,获得1积分~
来为老师/同学的回答评分吧
0 星