1MB quota limit for a blobstore object in Google App Engine?

前端 未结 3 566
野趣味
野趣味 2020-12-17 00:47

I\'m using App Engine (version 1.4.3) direct write the blobstore in order to save images. when I try to store an image which is larger than 1MB I get the following Exceptio

3条回答
  •  暖寄归人
    2020-12-17 01:27

    Here is how I read and write large files:

    public byte[] readImageData(BlobKey blobKey, long blobSize) {
        BlobstoreService blobStoreService = BlobstoreServiceFactory
                .getBlobstoreService();
        byte[] allTheBytes = new byte[0];
        long amountLeftToRead = blobSize;
        long startIndex = 0;
        while (amountLeftToRead > 0) {
            long amountToReadNow = Math.min(
                    BlobstoreService.MAX_BLOB_FETCH_SIZE - 1, amountLeftToRead);
    
            byte[] chunkOfBytes = blobStoreService.fetchData(blobKey,
                    startIndex, startIndex + amountToReadNow - 1);
    
            allTheBytes = ArrayUtils.addAll(allTheBytes, chunkOfBytes);
    
            amountLeftToRead -= amountToReadNow;
            startIndex += amountToReadNow;
        }
    
        return allTheBytes;
    }
    
    public BlobKey writeImageData(byte[] bytes) throws IOException {
        FileService fileService = FileServiceFactory.getFileService();
    
        AppEngineFile file = fileService.createNewBlobFile("image/jpeg");
        boolean lock = true;
        FileWriteChannel writeChannel = fileService
                .openWriteChannel(file, lock);
    
        writeChannel.write(ByteBuffer.wrap(bytes));
        writeChannel.closeFinally();
    
        return fileService.getBlobKey(file);
    }
    

提交回复
热议问题