Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/304.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 将图像上传到google bucket不会再将其识别为图像_Java_Spring Boot_Google Cloud Platform_Bucket_Vaadin14 - Fatal编程技术网

Java 将图像上传到google bucket不会再将其识别为图像

Java 将图像上传到google bucket不会再将其识别为图像,java,spring-boot,google-cloud-platform,bucket,vaadin14,Java,Spring Boot,Google Cloud Platform,Bucket,Vaadin14,我用的是带SpringBoot的Vaadin 14。我正在写一些软件,可以将图像上传到google bucket。上载本身工作正常,但到达存储桶的文件不再是图像。我在几周前写了代码,然后它仍然有效,没有任何变化,但现在它不再有效了。我使用InputStream将其上传到bucket,我从Vaadin上传组件获取流。这是密码 从vaadin组件上载到memoryBuffer public CreateKidView(@Autowired KidService kidService) {

我用的是带SpringBoot的Vaadin 14。我正在写一些软件,可以将图像上传到google bucket。上载本身工作正常,但到达存储桶的文件不再是图像。我在几周前写了代码,然后它仍然有效,没有任何变化,但现在它不再有效了。我使用InputStream将其上传到bucket,我从Vaadin上传组件获取流。这是密码

从vaadin组件上载到memoryBuffer

public CreateKidView(@Autowired KidService kidService) {
        this.kidService = kidService;

        TextField kidFirstName = new TextField("Voornaam");
        TextField kidLastName = new TextField("Achternaam");
        DatePicker kidBirthDate = new DatePicker("GeboorteDatum");
        TextField kidMedication = new TextField("Medicatie");
        MemoryBuffer memoryBuffer = new MemoryBuffer();
        Upload imageUpload = new Upload(memoryBuffer);

        Button button = new Button("Kind toevoegen",
                buttonClickEvent -> {
                    saveKidAndNavigate(kidFirstName.getValue(), kidLastName.getValue(), kidBirthDate.getValue(),
                            kidMedication.getValue(), memoryBuffer.getInputStream());
                }
        );

        button.addThemeVariants(ButtonVariant.LUMO_PRIMARY);

        addClassName("centered-content");

        add(kidFirstName, kidLastName, kidBirthDate, kidMedication, imageUpload, button);
    }
然后我将inputstream传递给其他几个类,在到达这里之前我不会对它做任何事情:我设置contentType:“image/jpeg”并将其传递给bucketService以上载inputstream

public void addImageToPerson(Person person, String imageName, InputStream inputStream) {
        String image = bucketService.uploadFileToBucket(imageName, "image/jpeg", inputStream);
        ......
    }
它曾经工作得很好,从那以后就再也没有代码改变过,所以我猜谷歌已经发生了一些变化。我想知道你们中是否有人有什么我可以尝试或知道的东西已经改变了

我还编写了一些代码来测试inputstream本身是否有效,我会在屏幕上显示从内存中获取的图像:

提前感谢:)

--编辑

经过进一步调查,我发现inputstream生成的字节[]与文件本身生成的byteArray不同:

byte[] bytes = IOUtils.toByteArray(inputStream);
byte[] content = Files.readAllBytes(Paths.get("/Users/BartDuwez/Desktop/avatars-000338105915-u01ky6-t500x500.jpg"));
storage.create(blobInfo, content);
有一个1字节的差异:第一个字节

字节:-40,-1,-30

内容:-1,-40,-1,-30

我不知道这是怎么回事。 要清除字节[]内容,请在bucket中正确显示图像

当我检查inputStream中的buf时,有一个字节[],该字节[]的内部与内容字节[]相同

如果我在调试器中执行此操作:

storage.create(blobInfo, ((ByteArrayInputStream) inputStream).buf);
一个文件被上传并且可以工作:但是.buf是受保护的,所以我不能在我的代码中使用它。这使得将inputstream转换为字节[]时出现问题

有人知道什么可以帮我的吗

storage.create(blobInfo, ((ByteArrayInputStream) inputStream).buf);