0

GCS에 이미지를 업로드 한 다음 동일한 파일 이름 (image.png)으로 다른 이미지로 덮어 씁니다. GCS 브라우저에서 이미지를 덮어 쓰는 것을 볼 수 있지만 (다른 크기, 타임 스탬프) getServingUrl()을 사용하여 이미지의 URL을 가져 오려고하면 처음 업로드 한 이미지의 URL이 나타납니다 !!!Google 클라우드 저장소 - 이전 이미지의 URL을 제공하는 getServingUrl()

새 파일 이름 (image2.png)으로 이미지를 추가하면 새 URL이 나타납니다. 이 이미지를 다른 이미지로 덮어 쓰면 (image2.png라는 이름으로 유지) 원래의 image2.png URL이 다시 나타납니다.

String bucketName = "my_bucket_name"; 
    String userFileName = "image.png"; 
    try { 
     GcsFileOptions instance = GcsFileOptions.getDefaultInstance(); 
     GcsFilename fileName = new GcsFilename(bucketName, userFileName);// getFileName(request); 
     GcsOutputChannel outputChannel; 
     gcsService.delete(fileName); 
     outputChannel = gcsService.createOrReplace(fileName, instance); 
     copy(request.getInputStream(), Channels.newOutputStream(outputChannel)); 
    } catch (IOException e) { 
     System.out.println(e.getMessage()); 
    } 

    ImagesService imagesService = ImagesServiceFactory.getImagesService(); 

    String url = imagesService.getServingUrl(ServingUrlOptions.Builder.withGoogleStorageFileName("/gs/" + 
      bucketName + "/" + userFileName).secureUrl(true)); 

사람이 내가 여기 잃었는지 말해 주시겠습니까 : 여기

내 코드? 새로 업로드 된 이미지의 핸들을 제공하기 위해 ImagesService를 얻는 방법은 무엇입니까? 감사. java_geek 당신을 지적

+0

자바 대신 PHP를 사용하면이 게시물을 참조 할 수 있습니다. http://stackoverflow.com/questions/37646849/how-can -we-use-firebase-image-file-and-resize-them-get-serving-url/37673504 # 37673504 –

답변

0

는 는걸 아마 알려진 앱 엔진 버그가 발생했습니다 : 당신은 항상 GCS 객체의 라이브 버전을 제공하려면 https://code.google.com/p/googleappengine/issues/detail?id=11381

을, 그리고 당신의 특별한 속성 중 하나를 필요가 없습니다 응용 프로그램은 엔진의 이미지 URL을 통해 그들에 연결 한 다음 "노 캐시"같은 설정은 "cacheControl"속성으로 개체를 만들 수 있습니다, 봉사와 :

http(s)://storage.googleapis.com/bucket_name/object_name 

이것은 GCS에서 직접 이미지를 제공합니다.

+0

아니요, 도움이되지 않았습니다. 당신이 제안한대로 cacheControl ("private")을 주었고 다른 컴퓨터에서 이것을 테스트하여 브라우저로 인해 문제가 발생하는 경우 해결되었습니다. 여전히 동일한 URL을 제공합니다. 저는 Postman에서 테스트 중이며 동일한 URL을 제공합니다. – Abhishek

+0

흥미 롭습니다. 'https://storage.googleapis.com/bucket_name/object_name'과 같은 URL을 제공하여 GCS에서 직접 게재하면 어떻게 되나요? –

+0

이 솔루션은 작동하지 않습니다. https://code.google.com/p/googleappengine/issues/detail? id = 11381 –

1

예상됩니다. 개체는 제어 할 수없는 중간 프록시 서버에 캐시 할 수 있습니다. 따라서 캐시 제어 헤더를 설정해도 문제가 해결되지 않을 수 있습니다.

파일을 업로드 할 때 파일 이름과 함께 저장하는 대신 파일의 md5hash를 이름으로 사용할 수 있습니다. 이렇게하면 파일 내용이 변경되면 md5hash가 달라집니다. 이 접근 방식을 사용하면 캐시 제어 헤더를 사용할 수 있으며 웹 페이지로드 속도가 빨라집니다

+0

해시 값이나 고유 한 이름을 사용하는 것이 올바른 방법 인 것 같습니다. 감사합니다. – Abhishek

관련 문제