Я хочу загрузить файл без использования multipart при весенней загрузке, было бы здорово, если бы я мог дать вам ценные предложения по этому вопросу - PullRequest
0 голосов
/ 07 января 2020

Должен ли я удалить это из application.properties

spring.http.multipart.enabled=true

Каким должен быть мой подход к загрузке этого файла без использования multipart?

Таким образом, я могу загрузить файл, используя где я использую multipart.

@RequestMapping(value = "/dog/create/{name}", method = RequestMethod.POST)
    public JsonNode dogCreation(HttpServletRequest httpRequest, @RequestParam(value = "picture", required = false) MultipartFile multipartFile,
                                @PathVariable("name") String name) throws IOException, InterruptedException {
        JSONObject response = new JSONObject();
        Dog dog = new Dog();
        String DOG_IMAGES_BASE_LOCATION = "resource\\images\\dogImages";

        try {
            File file = new File(DOG_IMAGES_BASE_LOCATION);
            if (!file.exists()) {
                file.mkdirs();
            }
        } catch (Exception e) {
            e.printStackTrace();
        }

        dog = dogService.getDogByName(name);
        if (dog == null) {
            if (!multipartFile.isEmpty()) {
                String multipartFileName = multipartFile.getOriginalFilename();
                String format = multipartFileName.substring(multipartFileName.lastIndexOf("."));
                try {
                    Path path = Paths.get(DOG_IMAGES_BASE_LOCATION + "/" + name + format);
                    byte[] bytes = multipartFile.getBytes();
                    File file = new File(path.toString());
                    file.createNewFile();
                    Files.write(path, bytes);
                    if (file.length() == 0) {
                        response = utility.createResponse(500, Keyword.ERROR, "Image upload failed");
                    } else {
                        String dbPath = path.toString().replace('\\', '/');
                        dog = new Dog();
                        dog.setName(name);
                        dog.setPicture(dbPath);
                        dog = dogService.dogCreation(dog);
                        response = utility.createResponse(200, Keyword.SUCCESS, "Image upload successful");
                    }
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        }

        return objectMapper.readTree(response.toString());
    }

Я хочу сделать это без использования multipart, что бы вы предложили?

Это то, что я до сих пор делал, чтобы решить эту проблему

@RequestMapping(value = "/dog/create/{name}", method = RequestMethod.POST)
    public JsonNode dogCreation(HttpServletRequest httpRequest, @RequestParam("picture") String picture,
                                @PathVariable("name") String name) throws IOException, InterruptedException {
        JSONObject response = new JSONObject();
        Dog dog = new Dog();
        String DOG_IMAGES_BASE_LOCATION = "resource\\images\\dogImages";

        try {
            File file = new File(DOG_IMAGES_BASE_LOCATION);
            if (!file.exists()) {
                file.mkdirs();
            }
        } catch (Exception e) {
            e.printStackTrace();
        }

        dog = dogService.getDogByName(name);
        if (dog == null) {
            if (!picture.isEmpty()) {
                String dogPicture = picture;
                byte[] encodedDogPicture = Base64.encodeBase64(dogPicture.getBytes());
                String format = dogPicture.substring(picture.lastIndexOf("."));
                try {

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

        return objectMapper.readTree(response.toString());
    }

request body picture is given below

1 Ответ

0 голосов
/ 07 января 2020

Я просто должен сказать, что это, вероятно, следует использовать только как обходной путь.

На вашем интерфейсе конвертируйте файл в base64 в js:

const reader = new FileReader();
reader.readAsDataURL(file);
reader.onload = function(evt) {
   console.log(evt.target.result);
   //do POST here - something like this:
   $.ajax("/upload64", {
     method: "POST",
     contentType: "application/text"
     data: evt.target.result
   }
};

На сервер с примером декодера - больше вариантов декодирования здесь Декодировать данные Base64 в Java

import sun.misc.BASE64Decoder;


@PostMapping("/upload64")
public String uploadBase64(@RequestBody String payload){
   BASE64Decoder decoder = new BASE64Decoder();
   byte[] decodedBytes = decoder.decodeBuffer(encodedBytes);
   //use your bytes
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...