java. Lang.numberformatexception: occurred for input string: ”
I have a problem deploying the application on the server (everything is OK on the local computer) In my application, users can upload files using multiupload This is my controller:
@Controller
public class FileUploadController {
@Autowired
private StoryService storyService;
@Autowired
private PhotoService photoService;
@RequestMapping("/uploader")
public String home() {
// will be resolved to /views/fileUploader.jsp
return "admin/fileUploader";
}
@RequestMapping(value = "/admin/story/upload",method = RequestMethod.POST)
public @ResponseBody
String upload(MultipartHttpServletRequest request,HttpServletResponse response,HttpServletRequest req) throws IOException {
//get story id
Integer story_id = Integer.valueOf(req.getParameter("story_id"));
Story story = storyService.findById(story_id);
// Getting uploaded files from the request object
Map<String,multipartfile> fileMap = request.getFileMap();
// Iterate through the map
for (multipartfile multipartfile : fileMap.values()) {
// Save the file to local disk
String name = Long.toString(System.currentTimeMillis());
//original size
saveFileToLocalDisk(multipartfile,name + ".jpg");
//medium size
Thumbnails.of(convertMultifileToFile(multipartfile)).size(1800,2400)
.toFile(new File(getDestinationLocation() + "medium_" + name));
//thumbnail size
Thumbnails.of(convertMultifileToFile(multipartfile)).size(600,800)
.toFile(new File(getDestinationLocation() + "thumb_" + name));
//Save to db
savePhoto(multipartfile,name,story);
}
return "redirect:/admin";
}
private void saveFileToLocalDisk(multipartfile multipartfile,String name)
throws IOException,FileNotFoundException {
FileCopyUtils.copy(multipartfile.getBytes(),new FileOutputStream(getDestinationLocation() +
name));
}
private String getOutputFilename(multipartfile multipartfile) {
return getDestinationLocation() + multipartfile.getOriginalFilename();
}
private Photo savePhoto(multipartfile multipartfile,String name,Story story)
throws IOException {
Photo photo = new Photo();
if (story != null) {
photo.setName(name);
photo.setStory(story);
photoService.addPhoto(photo);
}
return photo;
}
private String getDestinationLocation() {
return "/var/www/static/images/";
}
public File convertMultifileToFile(multipartfile file) throws IOException
{
File convFile = new File(file.getOriginalFilename());
convFile.createNewFile();
FileOutputStream fos = new FileOutputStream(convFile);
fos.write(file.getBytes());
fos.close();
return convFile;
}
}
When I try to upload an image on the server, I encounter the following exception:
SEVERE: Servlet.service() for servlet [mvc-dispatcher] in context with path [] threw exception [Request processing Failed; nested exception is java.lang.NumberFormatException: For input string: ""] with root cause java.lang.NumberFormatException: For input string: ""
We can't figure out what it means and how to solve it By the way, I noticed that when I upload a 100-200 KB file, everything is normal. When the file is 4-5 MB, I will encounter exceptions
Thank you in advance!
Solution
It seems that "story_id" is not always set; The correlation with file size may or may not be a coincidence
You should protect your code from such client errors by making the "story_id" parameter optional This is a good idea for all request parameters, because it can prevent the server from crashing due to incorrectly formed requests:
String storyIdStr = req.getParameter("story_id");
if (storyIdStr == null || storyIdStr.length() == 0) {
// Deal with the error
}
Integer story_id = null;
try {
story_id = Integer.valueOf(storyIdStr);
} catch (NumberFormatException nfe) {
// Deal with the error
}
