AdminUploadController.java

package sk.iway.iwcm.admin.upload;

import javax.servlet.http.HttpServletRequest;

import org.json.JSONObject;
import org.springframework.http.MediaType;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;
import sk.iway.iwcm.Logger;

@Controller
@RequestMapping("/admin/upload/")
public class AdminUploadController {

    @PostMapping(path="/skipkey", produces = MediaType.APPLICATION_JSON_VALUE)
    @ResponseBody
    public String skipkey(@RequestParam String fileKey, HttpServletRequest request)
    {
        JSONObject output = new JSONObject();

        boolean deleted = AdminUploadServlet.deleteTempFile(fileKey);

        try {
            output.put("success", deleted);
        } catch (Exception e) {
            Logger.error(AdminUploadController.class, e);
        }

        return output.toString();
    }

    @PostMapping(path="/overwrite", produces = MediaType.APPLICATION_JSON_VALUE)
    @ResponseBody
    public String overwrite(@RequestParam String fileKey, @RequestParam String destinationFolder, @RequestParam String fileName, @RequestParam String uploadType, HttpServletRequest request)
    {
        return processOverwrite(fileKey, destinationFolder, fileName, false, request);
    }

    @PostMapping(path="/keepboth", produces = MediaType.APPLICATION_JSON_VALUE)
    @ResponseBody
    public String keepboth(@RequestParam String fileKey, @RequestParam String destinationFolder, @RequestParam String fileName, @RequestParam String uploadType, HttpServletRequest request)
    {
        return processOverwrite(fileKey, destinationFolder, fileName, true, request);
    }

    /**
     * Vykona proces prepisania suboru alebo ponechania oboch
     * @param fileKey
     * @param destinationFolder
     * @param fileName
     * @param keepBoth - ak je nastavene na true ponecha oba subory, novemu da suffix -xxx
     * @param request
     * @return
     */
    private static String processOverwrite(String fileKey, String destinationFolder, String fileName, boolean keepBoth, HttpServletRequest request) {
        JSONObject output = new JSONObject();

        boolean success = false;
        String errorKey = null;

        String destinationFileName = fileName;

        if (keepBoth) {
            destinationFileName = UploadService.getKeppBothFileName(destinationFolder, fileName);
        }

        if (destinationFileName!=null) {

            try {
                UploadService uploadService = new UploadService(fileKey, destinationFolder, destinationFileName, request);

                output.put("virtualPath", uploadService.getVirtualPath());

                uploadService.process();

                success = true;
            }
            catch (Exception ex) {
                Logger.error(AdminUploadController.class, ex);
                errorKey = "multiple_files_upload.upload_error";
            }
        }
        else {
            errorKey = "multiple_files_upload.upload_error";
        }

        try {
            output.put("success", success);
            if (errorKey != null) output.put("error", errorKey);
        } catch (Exception e) {
            Logger.error(AdminUploadController.class, e);
        }

        return output.toString();
    }
}