4

I'm facing an issue when I deploy my application on server side (on local machine everything works fine). In my application, a user can use multiupload for uploading files. Here 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 images on the server, I'm getting 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: ""

Can't figure out what it means and how to solve it. By the way, I've noticed that when I upload files which are 100-200 KB everything is ok, when files are 4-5 MB I get exception.

Thanks in advance!

2 Answers 2

5

It appears that "story_id" is not always set; correlation with the file size may or may not be a coincidence.

You should protect your code from client-side errors like this by treating the "story_id" parameter as optional. This is a good idea for all request parameters, because it prevents your server side from crashing on improperly 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
}
Sign up to request clarification or add additional context in comments.

6 Comments

have you worked with annotation @notnull or something like that in Java 8?
@KickButtowski I am not sure if it would be of much help here, because story_id appears to be set to an empty string, rather than null.
I got the point but have you worked with the annotation that I mentioned ?
@KickButtowski No, I never used that annotation (and I never used Java 8 for work).
k I was watching a video about Java 8 and there is such a annotation but I have not been able to find any useful info about it. you should take a look at it
|
3

Integer.valueOf(req.getParameter("story_id")); will give you this exception if req.getParameter("story_id") returns an empty String, since an empty String can't be parsed as an Integer.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.