1

「gwtuploaded」を使用して画像をアプリエンジンにアップロードし、画像をブロブとして保存する機能を作成することができました。私の問題は次のとおりimagesService.getServingUrl(suo)です。アップロードした画像よりも小さい画像へのリンクから取得したURL。App Engine コンソールの Blob Viewer で画像を確認すると、正しいサイズのようです。

次のコードでサイズ変更されたバージョンの画像を取得するのはなぜですか。どうにかしてフル サイズの画像の URL を取得できますか?

私のコードは次のようになります。

public class MyUploadAction extends AppEngineUploadAction{

    @Override
    public String executeAction(HttpServletRequest request, List<FileItem> sessionFiles) throws UploadActionException {

        String imageUrls = "";

        // Image service is needed to get url from blob
        ImagesService imagesService = ImagesServiceFactory.getImagesService();

        // Get a file service -> write the blob
        FileService fileService = FileServiceFactory.getFileService();

        // Iterate over the files and upload each one
        for(FileItem myFile : sessionFiles){

            InputStream imgStream = null;
            // construct our entity objects
            Blob imageBlob = null;

            // Create a new Blob file with mime-type "image/png"
            AppEngineFile file = null;

            FileWriteChannel writeChannel = null;
            try {
                // get input stream from file
                imgStream = myFile.getInputStream();
                imageBlob = new Blob(IOUtils.toByteArray(imgStream));

                // create empty app engine file with mime type of uploaded file e.g.: image/png, image/jpeg
                file = fileService.createNewBlobFile(myFile.getContentType());

                // Open a channel to write to it
                boolean lock = true;
                writeChannel = fileService.openWriteChannel(file, lock);

                // This time we write to the channel directly
                writeChannel.write(ByteBuffer.wrap(imageBlob.getBytes()));

            } catch (IOException e) {
                e.printStackTrace();
            }finally{
                // Now finalize
                try {
                    writeChannel.closeFinally();
                } catch (IllegalStateException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                } catch (IOException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }

            }

            // Get the url from the blob
            ServingUrlOptions suo = ServingUrlOptions.Builder.withBlobKey(fileService.getBlobKey(file)).secureUrl(true);
            imageUrls += imagesService.getServingUrl(suo);
            imageUrls = imageUrls.replaceFirst("0.0.0.0", "127.0.0.1");
            System.out.println(imageUrls);

        }
        return imageUrls ;
    }
}
4

1 に答える 1

1

試してみたところ、イメージ サービスの最大イメージ出力は 1600x1600 であることがわかりました。こちらを参照して 1600 を検索してください: https://developers.google.com/appengine/docs/java/images/

サイズ直しのご依頼がない場合も同様です。

画像を元のサイズで提供するには、画像サービスを使用しないでください。(ブロブストアなど) から直接出力するだけです。

于 2013-09-06T04:20:19.537 に答える