Расшифровка файла, созданного с помощью API файловой системы - PullRequest
0 голосов
/ 01 марта 2012

У меня есть изображения, загруженные в blobstore с помощью API файловой системы.Файлы были успешно загружены, и я вижу большие двоичные объекты в соответствующем каталоге.

Но тогда как мне декодировать эти файлы так, чтобы при отправке обратно клиенту или при получении с помощью API-интерфейса blobstore яудалось получить изображение?Прямо сейчас / blobstore / writable: xxx для меня бесполезен, потому что когда я обертываю путь в <img src="/blobstore/writable:xxx" />, он не дает мне изображения.

Ответы [ 2 ]

1 голос
/ 02 марта 2012

Пара опций -

  1. Используйте getServingUrl , чтобы создать URL-адрес для вашего изображения, а затем вернуть этот URL-адрес как часть вашего ответа.Сохраните этот URL-адрес в хранилище данных, так как URL-адрес не изменится для того же большого двоичного объекта.Это также позволяет динамически изменять размер и обрезать изображение, которое вы обслуживаете.URL-адреса являются общедоступными, поэтому, если вам нужна какая-то форма контроля доступа к обслуживанию изображения, вам может потребоваться опция (2).

  2. Используйте serveBlob и обработчик запроса дляотправить изображения.Нет динамического изменения размера (вы можете сделать это самостоятельно в обработчике, если хотите), но вы можете ACL каждый запрос, если это необходимо.

0 голосов
/ 02 марта 2012

Я исправил это:

    FileService fileService = FileServiceFactory.getFileService();
    AppEngineFile writableFile = fileService.createNewBlobFile(request.getParameter("qqfile"));
    FileWriteChannel writeChannel = null;
        try {
                byte[] buffer = new byte[4096]; // 4MB
                lock = true;
                writeChannel = fileService.openWriteChannel(writableFile, lock);
                // increase the buffer size as you are reading from the 
                // input stream. Read the input stream into buffer
                for (int n; (n = stream.read(buffer)) != -1; ){ 
                    writeChannel.write(ByteBuffer.wrap(buffer));
                } 
            } finally {
                    writeChannel.closeFinally();
            }

    BlobKey blobKey = fileService.getBlobKey(writableFile);
    ImagesService imagesService = ImagesServiceFactory.getImagesService();

    // produces something like http://localhost:8888/_ah/img/SU52WMsoCRP3kqAvQqVW3g
    String imageUrl = imagesService.getServingUrl(blobKey);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...