загрузка весеннего загрузочного образа в облачное хранилище Google не работает - PullRequest
0 голосов
/ 22 октября 2018

Я хочу загрузить изображения в облачное хранилище Google, и вот мой код из весенней загрузки.Но проблема в том, что это вообще не работает и выдает ошибку вроде этого:

2018-10-22 15: 22: 55.628 ОШИБКА 6172 --- [nio-8080-exec-6] oaccC [. [.[/].[dispatcherServlet]: Servlet.service () для сервлета [dispatcherServlet] в контексте с путем [] вызвала исключение [Ошибка обработки запроса;вложенное исключение - java.lang.IllegalArgumentException: вызванный метод public abstract java.io.InputStream org.apache.commons.fileupload.FileItemStream.openStream () вызывает java.io.IOException не метод доступа!] с коренной причиной

пожалуйста, помогите мне.Ниже приведен код, который я написал

 private static Storage storage = null;

    // [START init]
    static {
        storage = StorageOptions.getDefaultInstance().getService();
    }

 @SuppressWarnings("deprecation")
 @RequestMapping(method = RequestMethod.POST, value = "/imageUpload")
 public String uploadFile(FileItemStream fileStream)
        throws IOException, ServletException {

     String bucketName = "mcqimages";
        checkFileExtension(fileStream.getName());
        DateTimeFormatter dtf = DateTimeFormat.forPattern("-YYYY-MM-dd-HHmmssSSS");
        DateTime dt = DateTime.now(DateTimeZone.UTC);
        String dtString = dt.toString(dtf);
        final String fileName = fileStream.getName() + dtString;


        BlobInfo blobInfo =
                storage.create(
                        BlobInfo
                        .newBuilder(bucketName, fileName)
                        .setAcl(new ArrayList<>(Arrays.asList(Acl.of(User.ofAllUsers(), Role.READER))))
                        .build(),
                        fileStream.openStream());

        return blobInfo.getMediaLink();
    }

    private void checkFileExtension(String fileName) throws ServletException {
        if (fileName != null && !fileName.isEmpty() && fileName.contains(".")) {
            String[] allowedExt = {".jpg", ".jpeg", ".png", ".gif"};
            for (String ext : allowedExt) {
                if (fileName.endsWith(ext)) {
                    return;
                }
            }
            throw new ServletException("file must be an image");
        }
    }

Ответы [ 2 ]

0 голосов
/ 12 ноября 2018

наконец-то я придумал этот код :).работал очень хорошо.нужны учетные данные для загрузки файлов в хранилище GCP.вы также можете сгенерировать учетные данные из формата JSON.

https://cloud.google.com/docs/authentication/production

     Credentials credentials = GoogleCredentials.fromStream(new FileInputStream("C:\\Users\\sachinthah\\Downloads\\MCQ project -1f959c1fc3a4.json"));

Storage storage = StorageOptions.newBuilder().setCredentials(credentials).build().getService();

            public CloudStorageHelper() throws IOException {
            }


            @SuppressWarnings("deprecation")
            @RequestMapping(method = RequestMethod.POST, value = "/imageUpload112")
            public String uploadFile(@RequestParam("fileseee")MultipartFile fileStream)
                    throws IOException, ServletException {

                String bucketName = "mcqimages";
                checkFileExtension(fileStream.getName());
                DateTimeFormatter dtf = DateTimeFormat.forPattern("-YYYY-MM-dd-HHmmssSSS");
                DateTime dt = DateTime.now(DateTimeZone.UTC);
                String dtString = dt.toString(dtf);
                final String fileName = fileStream.getName() + dtString;

                File file = convertMultiPartToFile( fileStream );

                BlobInfo blobInfo =
                        storage.create(
                                BlobInfo
                                        .newBuilder(bucketName, fileName)
                                        .setAcl(new ArrayList<>(Arrays.asList(Acl.of(User.ofAllUsers(), Role.READER))))
                                        .build()
        //                     file.openStream() 
        );
                System.out.println(blobInfo.getMediaLink());
                return blobInfo.getMediaLink();
            }


            private File convertMultiPartToFile(MultipartFile file ) throws IOException
            {
                File convFile = new File( file.getOriginalFilename() );
                FileOutputStream fos = new FileOutputStream( convFile );
                fos.write( file.getBytes() );
                fos.close();
                return convFile;
            }


            private void checkFileExtension(String fileName) throws ServletException {
                if (fileName != null && !fileName.isEmpty() && fileName.contains(".")) {
                    String[] allowedExt = {".jpg", ".jpeg", ".png", ".gif"};
                    for (String ext : allowedExt) {
                        if (fileName.endsWith(ext)) {
                            return;
                        }
                    }
                    throw new ServletException("file must be an image");
                }
            }
0 голосов
/ 22 октября 2018

Я бы попытался загрузить файл вместо:

public String uploadFile(@RequestParam("file") MultipartFile file) {
    if (file.isEmpty()) {
        //Set error message
    }
    else {
        try {
            String extension = FilenameUtils.getExtension(file.getOriginalFilename()); //Commons IO

            // Get the file 
            byte[] bytes = file.getBytes();
            ....
    }

Хороший пример загрузки файлов здесь: https://www.baeldung.com/spring-file-upload

...