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

Java Google云存储上载媒体链接空,但图像上载

佟阳飙
2023-03-14

我试图上传图像到我的谷歌云存储中的现有桶。当我去检查的时候,图像文件被成功上传,但是返回的下载网址是null

private String uploadImage(File filePath, String blobName, File uploadCreds) throws FileNotFoundException, IOException{


   Storage storage = StorageOptions.newBuilder().setProjectId("myProjectId")
                .setCredentials(ServiceAccountCredentials.fromStream(new FileInputStream(uploadCreds)))
                .build()
                .getService();

                    String bucketName = "myBucketName"; 
                    Bucket bucket = storage.get(bucketName);
        BlobId blobId = BlobId.of(bucket.getName(), blobName);
        InputStream inputStream = new FileInputStream(filePath);
        BlobInfo blobInfo = BlobInfo.newBuilder(blobId).setContentType("image/jpeg").build();


    try (WriteChannel writer = storage.writer(blobInfo)) {
        byte[] buffer = new byte[1024];
        int limit;
        try {
            while ((limit = inputStream.read(buffer)) >= 0) {
                writer.write(ByteBuffer.wrap(buffer, 0, limit));
            }

        } catch (Exception ex) {
            ex.printStackTrace();
        }finally {
            writer.close();

        }
                     System.out.println("Image URL : " + blobInfo.getMediaLink());
                     System.out.println("Blob URL : " + blobInfo.getSelfLink());
                     return blobInfo.getMediaLink();
    }


}

FilePath是图像文件
BloName是一个随机图像名称
上传Creds是我的credintials.json文件

为什么blobInfo.getMediaLink()和blobInfo.getSelfLink()返回null<我做错了什么?


共有1个答案

齐健柏
2023-03-14

这是我的代码,它可以完美地工作

@RestController
@RequestMapping("/api")
public class CloudStorageHelper  {

    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 {
        BlobstoreService blobstoreService = BlobstoreServiceFactory.getBlobstoreService();
        String bucketName = "mcqimages";
        checkFileExtension(fileStream.getName());
        DateTimeFormatter dtf = DateTimeFormat.forPattern("-YYYY-MM-dd-HHmmssSSS");
        DateTime dt = DateTime.now(DateTimeZone.UTC);

        String fileName = fileStream.getOriginalFilename();

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

        System.out.println(blobInfo.getMediaLink());

        // sachintha added a comma after the link to identify the link that get generated
        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");
    }
}
 类似资料:
  • 我想在firebase存储中上载图像。我知道如何使用Uri在firebase中上传图像。但是有没有一种方法可以让我使用链接将图像上传到firebase? 我在我的项目中使用了一个API,我每月只能点击1000次,所以我试图在firebase中保存从API获取的图像。API提供了一个指向图像的链接,我使用它在Picasso的imageview中显示图像。 假设我的链接是http://xxx.xx.x

  • 我试图在Firebase存储中使用Firebase上传图像,但文件不能完全上传。它只显示图像的大小9字节,下载时无法预览。 这是我使用的代码:- 我使用的反应本地图像作物选择器。我使用Firebase,但不是反应本机Firebase。请帮助!

  • 我已经阅读了与此相关的所有其他答案。但这对我不起作用,或者我只是不明白一些事情。请帮忙。 我正在从客户端发送'image/png'base64字符串。它是这样的:“Ivborw0kggoaaansuheugaaaaaaaaaaa……” 在云函数我有方法: 有什么不对劲?

  • 以下是我的上传代码: 编辑:我将base64字符串复制到一个在线转换器中,看起来不错,它返回了正确的图像。看起来,数据没有问题。firebase的处理方式有问题。 编辑:我尝试显式地将类型设置为image/jpeg而不是image/jpg,如下所述:当Firestorage关闭时显示图像的正确方式,或者在Firestorage for iOS中加载预览时出错,但没有区别。

  • 我创建了一个使用Firebase存储运行的应用。这个想法是,您从照片库中选择一张图片,然后将其上传到Firebase存储。与Firebase的连接似乎工作正常,我可以选择图像。当我按下提交按钮将其上传到Firebase时,问题就出现了。 当我点击它一次,什么也没发生。 当我点击它几次时,我得到一条消息“发生未知错误,请检查HTTP结果代码和内部异常”。。 我该怎么做,寻求建议。。 从舱单中: 从活

  • 在我的应用程序中,我让用户注册/登录他们的社交媒体帐户,即。领英、谷歌和脸书。 我的问题是,一旦我获得了用户的个人资料图片网址,我应该在我的系统中保存图像,还是允许我简单地保存网址,让图像从用户的社交媒体帐户中提供?我甚至不确定我是否被允许保存这张照片,因为从技术上来说,它可能是领英、谷歌或脸书的财产。