createNewFile () не работает и изображение не сохраняется - PullRequest
0 голосов
/ 24 сентября 2019

Я пытаюсь сохранить изображения на моем локальном компьютере и их информацию в базе данных.Но никакие данные не вставляются в базу данных.Файл создается, но его содержимое отсутствует (имеет 0 байт).

Я использую REST API hibernate и spring mvc.Я получаю данные из углового приложения 7.Программа работает на реальном сервере, но не на моем локальном компьютере.

На локальном сервере я получаю эту ошибку и отвечаю

POST http://localhost:8080/com_bmis_app_war_exploded/api/product/save/19 500 core.js: 15724 ОШИБКА TypeError: Невозможно прочитать свойство 'length' с неопределенным значением в AppService.push ../ src / app / app.service.ts.AppService.errorObjToMap (app.service.ts: 56) в SafeSubscriber._error (edit-product).component.ts: 240) at SafeSubscriber.push ../ node_modules / rxjs / _esm5 / internal / Subscriber.js.SafeSubscriber .__ tryOrUnsub (Subscriber.js: 192) ...........

Это ошибка ответа: Состояние HTTP 500 - Внутренняя ошибка сервера

Основная причина

java.lang.UnsupportedOperationException
    java.base/sun.nio.fs.WindowsFileSystemProvider.readAttributes(WindowsFileSystemProvider.java:193)
    java.base/java.nio.file.Files.readAttributes(Files.java:1763)
    com.bmis.app.controller.ProductController.saveProduct(ProductController.java:329)
    com.bmis.app.controller.ProductController.addProduct(ProductController.java:443)......................</p>
</blockquote>

<p>
Это мой код:
private ResponseEntity saveProduct(Integer id, @Valid @RequestBody Product product, MultipartFile[] images, BindingResult bindingResult, HttpServletRequest request) throws IOException {
    HashMap response = new HashMap();
    boolean success = false;
    List errors = new ArrayList();
    HttpStatus httpStatus = HttpStatus.BAD_REQUEST;
    String message = "";
    Map data = new HashMap();
    Slugify slg = new Slugify();
    String directory = "C:/Users/dellm4700/Documents/images";

    Set<ProductImage> productImages = new HashSet<>();
    for (MultipartFile multipartFile : images) {
        ProductImage productImage = new ProductImage();
        productImage.setSize(multipartFile.getSize());
        productImage.setExtension(multipartFile.getContentType());
        productImage.setActualImageName(new Date().getTime() + multipartFile.getOriginalFilename());
        productImage.setStandardImageName(multipartFile.getOriginalFilename());
        productImage.setNameAtFilestore(slg.slugify(productImage.getActualImageName()));
        productImage.setThumbnailImageName("thumb_"+ new Date().getTime() + multipartFile.getOriginalFilename());
        productImage.setProduct(product);
        productImages.add(productImage);
        File imageFile = new File(directory + "/" + productImage.getActualImageName());
        imageFile.setReadable(true, false);
        imageFile.createNewFile();
        Set<PosixFilePermission> perms = Files.readAttributes(imageFile.toPath(), PosixFileAttributes.class).permissions();
        try {
            multipartFile.transferTo(imageFile);
            perms.add(PosixFilePermission.OTHERS_READ);
            perms.add(PosixFilePermission.GROUP_READ);
            perms.add(PosixFilePermission.OTHERS_READ);
            Files.setPosixFilePermissions(imageFile.toPath(), perms);
        } catch (IOException e) {
            e.printStackTrace();
        }

        File thumbFile = new File(directory + "/" + productImage.getThumbnailImageName());
        thumbFile.setReadable(true, false);
        thumbFile.createNewFile();
        Set<PosixFilePermission> thumbperms = Files.readAttributes(thumbFile.toPath(), PosixFileAttributes.class).permissions();
        perms.add(PosixFilePermission.OTHERS_READ);
        perms.add(PosixFilePermission.GROUP_READ);
        perms.add(PosixFilePermission.OTHERS_READ);
        Files.setPosixFilePermissions(thumbFile.toPath(), perms);

        try {
            Thumbnails.of(directory + "/" + productImage.getActualImageName())
                    .size(200, 200).keepAspectRatio(false)
                    .toFile(thumbFile);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
    productImages.addAll(product.getProductImages());
    product.setProductImages(productImages);

    for (CustomAttribute customAttribute : product.getCustomAttributes()) {
        customAttribute.setProduct(product);
    }

    Claims claims = (Claims) request.getAttribute("claims");

    User user = userService.findById((Integer) claims.get("id"));

    productValidator.validate(product, bindingResult);

    if (id != null) {
        Product sourceProduct = productService.findById(id);
    //  sourceProduct.getPrices().clear();

        if (!(StringUtility.compare(sourceProduct.getName(), product.getName())) && (productService.findByName(product.getName()) != null)) {
            bindingResult.rejectValue("name", null, "Product with same name already exists");
            message = "Fill the form properly";
        } else if (!(StringUtility.compare(sourceProduct.getBarcode(), product.getBarcode())) && (productService.findByBarCode(product.getBarcode()) != null)) {
            message = "Fill the form properly";
            bindingResult.rejectValue("barcode", null, "Product with same barcode already exists");
        }

    //     DaoUtility.copyNonNullProperties(product, sourceProduct);
    //     product = sourceProduct;
    } else {
        if (productService.findByName(product.getName()) != null) {
            message = "Fill the form properly";
            bindingResult.rejectValue("name", null, "Product with same name already exists");
        } else if (productService.findByBarCode(product.getBarcode()) != null) {
            message = "Fill the form properly";
            bindingResult.rejectValue("barcode", null, "Product with same barcode already exists");
        }

    }

    try {
        if (!bindingResult.hasErrors()) {


            for (Price price : product.getPrices()) {
                price.setProduct(product);
            }

            if (id == null) {
                productService.save(product);

            } else {
                productService.update(product);
            }

            data.put("products", product);
            success = true;
            message = "Product Successfully added";
            httpStatus = HttpStatus.OK;

        } else {
            for (FieldError error : bindingResult.getFieldErrors()) {
                message = "Fill the form properly";
                errors.add(new ErrorMessage(error.getField(), error.getDefaultMessage()));
            }
        }

    } catch (Exception e) {
        errors.add(new ErrorMessage("error", e.getMessage()));
    }

    response.put("success", success);
    response.put("errors", errors);
    response.put("message", message);
    response.put("data", data);
    return new ResponseEntity(response, httpStatus);
}

1 Ответ

0 голосов
/ 25 сентября 2019

На самом деле проблема была в классе PosixFilePermission, поскольку этот класс работает только с операционными системами на основе Linux.При использовании метода readAttributes () он выдавал ошибку, поскольку в Linux есть свои методы для получения атрибутов файлов, а в окнах свои.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...