2013-10-12 4 views
2

Я использую Google Cloud Storage для хранения изображений. Я заметил, что вы можете загружать несколько файлов, но я ничего не видел о предоставлении разрешений для всех файлов за один раз. Я предоставляю полный доступ к ведру, но снова все файлы внутри него не получают одинаковые разрешения, и я должен давать один за другим. Я также реализовал обработчик для загрузки файлов программным способом. Любые идеи о том, как предоставить полный доступ к моим изображениям при загрузке? Пожалуйста, смотрите ниже код, я использую Spring MVC контроллеры:Google cloud storage java - Как предоставить доступ к файлу при загрузке программно

@RequestMapping(value="/gcs/userimages/{id}", method = RequestMethod.PUT) 
    public void doPost(HttpServletRequest req, HttpServletResponse resp) throws IOException { 
     GcsService gcsService = 
        GcsServiceFactory.createGcsService(RetryParams.getDefaultInstance()); 
    // GcsFileOptions go = new GcsFileOptions(Builder.); 
     GcsFileOptions options = new GcsFileOptions.Builder().mimeType("image/png").build(); 
    GcsOutputChannel outputChannel = 
     gcsService.createOrReplace(getFileName(req), options); 
    //outputChannel.write(ByteBuffer.wrap(content)); 
    copy(req.getInputStream(), Channels.newOutputStream(outputChannel)); 
    } 

    private GcsFilename getFileName(HttpServletRequest req) { 
    String[] splits = req.getRequestURI().split("/", 4); 
    if (!splits[0].equals("") || !splits[1].equals("gcs")) { 
     throw new IllegalArgumentException("The URL is not formed as expected. " + 
      "Expecting /gcs/<bucket>/<object>"); 
    } 
    return new GcsFilename(splits[2], splits[3]); 
    } 

ответ

3

Цитируя Documentation

списки ACL по умолчанию Object

Каждый ковш имеет объект по умолчанию ACL и этот ACL применяется для всех объектов, загруженных в это ведро без предопределенного ACL.

Таким образом, при редактировании списков управления доступом объектов По умолчанию к тому, что вам нужно, каждый файлы, загруженные в этом ведре получите списки ACL по умолчанию

Прочитайте документацию доступные методы для редактирования этих параметров: Изменение по умолчанию списки ACL объекта

вы также можете использовать JSON APIs, где вы можете использовать APIs Explorer сделать тесты

+0

Я пробовал это. Я дал всем пользователям доступ на чтение к ведру, но когда я загружаю файл либо вручную, либо через gcs admin, либо программно сам файл не наследует разрешения. – Dimitris

+2

Ковши имеют два разных типа ACL. Здесь есть ACL, который представляет собой доступ к ведру, но есть также ACL-объект «по умолчанию», который является ACL, который будет применяться к объектам, созданным в этом ведре по умолчанию. Предоставление доступа для чтения в ведро не влияет на ACL объекта по умолчанию. –

+0

@Brandon Yarbrough - Спасибо, знаете ли вы, как отредактировать ACBC по умолчанию для ACL перед загрузкой файлов? – Dimitris

2

Думаю, я нашел подход к этому. Я просто изменил код на:

GcsFileOptions options = new GcsFileOptions.Builder().acl("public_read").mimeType("image/png").build(); 

Теперь каждый раз, когда файл загружается, каждый имеет доступ для чтения.

+1

Спасибо, это сработало для меня! –