ProgIsMetal
ProgIsMetal

Reputation: 482

Upload image from android app gallery to local spring server

Last 3 days I started to learn Spring. I want to send a image from the phone gallery to the spring server. I want to mention that the server is local so I'm using localhost. I saw a tutorial that if I want to send stuff to a local server, the server address is my laptop address + the port (ex. 8080) and I have to connect the phone to the same Wi-Fi as the laptop.

I know how to get the image from the gallery but I don't know how to send it. Many solutions from stackoverflow are old and some classes got deprecated and I can't try their method.

Also, what should I do in the spring controller to receive the image?

Upvotes: 1

Views: 1650

Answers (1)

Channa Jayamuni
Channa Jayamuni

Reputation: 1905

You'll have use MultipartFile to upload an image using spring. Please go through following example.

@RequestMapping(value = "/upload", method = RequestMethod.POST)
public String fileUpload(@RequestParam("file") MultipartFile file) {
    try {
        // Get the file and save it somewhere
        byte[] bytes = file.getBytes();

        //save file in server - you may need an another scenario
        Path path = Paths.get("/" + file.getOriginalFilename());
        Files.write(path, bytes);

    } catch (IOException e) {
        e.printStackTrace();
    }

    //redirect to an another url end point 
    return "redirect:/upload-status";
}

Please make sure you can reach to your computer through your mobile device. I believe you may know that Android requires additional privilege to use network connections. So make sure you have permitted your app to access network.

EDIT:

You can use HttpClient to upload file from your mobile app. Please try following code.

    HttpClient httpClient = AndroidHttpClient.newInstance("App");
    HttpPost httpPost = new HttpPost("http://your-server-url");

    httpPost.setEntity(new FileEntity(new File("your-file-path"), "application/octet-stream"));

    HttpResponse response = httpClient.execute(httpPost);

Upvotes: 1

Related Questions