Возникают ошибки, когда я хочу прочитать ZIP-файл, хранящийся в Blobstore - PullRequest
1 голос
/ 09 ноября 2010

Это моя HTML-страница:

загрузите ваш файл сюда:

 <form action="<%= blobstoreService.createUploadUrl("/bootstrap") %>" method="post" enctype="multipart/form-data">

        <input type="file" name="myFile">

        <input type="submit" value="Submit">

  </form>

Это мой контроллер:

 protected void processRequest(HttpServletRequest request, HttpServletResponse response)
 throws ServletException, IOException, UploadException {

    response.setContentType("text/html;charset=UTF-8");
    PrintWriter out = response.getWriter();
    try {
        Map<String, BlobKey> blobs = blobstoreService.getUploadedBlobs(request);
        BlobKey blobKey = blobs.get("myFile");

        if (blobKey == null) {
        response.sendRedirect("/");
        } else {
            BlobKey blobKey2 = new BlobKey(blobKey.getKeyString());
            BlobstoreInputStream in = new BlobstoreInputStream(blobKey2);

            ZipInputStream zis = new ZipInputStream(new BufferedInputStream(in));
            ZipEntry entry = zis.getNextEntry();

            while (entry !=null){
                String fileName = entry.getName();
                int fileSize = (int) entry.getSize();

            }
        }

Я загружаю файл, который содержит 6 zip-файлов. Я могу загрузить его, но не могу прочитать ZIP-файл. Лучшее решение или я должен что-то настроить?

Ответы [ 2 ]

1 голос
/ 11 ноября 2010

Для начала нам нужно узнать разницу между Blob и BlobKey.С помощью BlobKey можно получить данные, хранящиеся в хранилище больших двоичных объектов, размер которых превышает 1 МБ.Приведенный ниже код является примером для чтения zip-файла.

API помог мне решить: http://code.google.com/appengine/docs/java/javadoc/

BlobstoreInputStream in = new BlobstoreInputStream(blobKey);
ZipInputStream zis = new ZipInputStream(new BufferedInputStream(in));
ZipEntry entry = zis.getNextEntry();
0 голосов
/ 09 ноября 2010

Если какой-либо отдельный файл в zip-архиве, который вы пытаетесь извлечь, превышает 1 МБ, он не будет работать.Там нет никакого способа обойти это.Вы можете хранить все, что захотите, в blobstore, но GAE накладывает ограничение в 1 МБ на любую структуру данных в памяти;это означает, что если вы пытаетесь работать с любым объектом размером более 1 МБ, ваша операция не будет выполнена.В приведенном выше примере ваш ZipEntry объект больше 1 МБ, если какой-либо файл в вашем архиве больше 1 МБ без сжатия.

...