为了账号安全,请及时绑定邮箱和手机立即绑定

春季启动图像上传到谷歌云存储桶不起作用

春季启动图像上传到谷歌云存储桶不起作用

素胚勾勒不出你 2021-12-01 16:23:37
我想将图像上传到谷歌云存储,这是我的 Spring Boot 代码。但问题是这根本不起作用,给我这样的错误:2018-10-22 15:22:55.628 错误 6172 --- [nio-8080-exec-6] oaccC[.[.[/].[dispatcherServlet] : Servlet.service() for servlet [dispatcherServlet] 在上下文中路径[]抛出异常[请求处理失败;嵌套异常是 java.lang.IllegalArgumentException: Invoked method public abstract java.io.InputStream org.apache.commons.fileupload.FileItemStream.openStream() throws java.io.IOException is no accessor method!] 具有根本原因请帮我。以下是我写的代码 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 回答

?
大话西游666

TA贡献1817条经验 获得超14个赞

最后我想出了这个代码:)。工作得很好。需要凭据才能将文件上传到 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");

                }

            }


查看完整回答
反对 回复 2021-12-01
?
德玛西亚99

TA贡献1770条经验 获得超3个赞

我会尝试上传文件:


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


查看完整回答
反对 回复 2021-12-01
  • 2 回答
  • 0 关注
  • 98 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信