当前位置: 首页 > 知识库问答 >
问题:

spring boot映像上传到google cloud storage bucket无法工作

燕建中
2023-03-14
 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");
        }
    }

共有1个答案

章绪
2023-03-14

最后我想出了这段代码:)。工作得很好。需要凭据将文件上传到GCP存储中。您也可以从JSON格式生成凭据。

     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");
                }
            }
 类似资料:
  • 在IntelliJ中启动新项目时,我遇到了一个问题: < li>Maven构建总是成功终止 < li >“重新加载所有Maven项目”导致错误 < li >无法将org . spring framework . boot . spring application导入主类 这是我的pom.xml: 注意:我尝试添加

  • 目前我正在做一个项目,我试图上传一个图像从反应前端到Spring启动后端。我能够成功上传我的图像,并将其存储在我的“目标/类/静态/公共/资产”文件夹中。我还将路径存储在我的数据库中,即“/public/资产/image_name.jpg”。构建“. jar”文件后,当我尝试访问图像时,它会给我这个错误消息。但是我能够访问我存储在“/资源/静态/”文件夹中的那些图像。 我知道这是一个配置问题。但我

  • 我正在使用以下方法来保存信息。 我已经删除了一些用于访问数据库的代码行。 这是日志猫的描述。 E/StorageException:已发生StorageException。发生未知错误,请检查HTTP结果代码和内部异常以获取服务器响应。代码:-13000 HttpResult:0 E/AndroidRuntime:FATAL EXCEPTION:Firebase Storage-Upload-1

  • 问题内容: 我正在使用codeigniter 3.1。我想使用ajax发布上传数据。 Ajax上传文件不起作用。但是,当我发布不带ajax的简单表单时,它工作正常。 我不知道为什么,但控制台没有错误。 的HTML JAVASCRIPT 控制器 问题答案: 问题之一是文件上传使用的机制与其他表单类型不同。这就是为什么没有为您完成工作的原因。其他答案建议使用javascript,而这个答案也可以。 的

  • 我试图上传多张图片到服务器,但总是出现问题。我也尝试了一些其他的解决方案,但是没有效果。 我的错误是 [错误:颤动/库/用户界面/ui_dart_state抄送(166)]未处理的异常:状态错误:无法完成最终确定的请求。E/扑动 (11521): #0 基础请求 (base_request 11521): #11521: #1 多部分请求完成 base_request (multipart_req

  • 当我上传图片时,我收到以下错误: 警告:move _ uploaded _ file(/images/profile 767 abb feae 82141 . jpg)[function . move-uploaded-file]:无法打开流:第5行的/Applications/XAMPP/xamppfiles/htdocs/core/functions/users . PHP中没有这样的文件或目