Google App Engine - запрос Blobstore работает на производстве, не в разработке - PullRequest
0 голосов
/ 03 марта 2012

Я использую google app engine для разработки формы загрузки для загрузки файла csv. У меня сейчас проблема в том, что в среде разработки действие запроса должно отправляться правильно.

В производственной среде действие запроса, кажется, работает, хотя действие одинаково для обеих форм.

* 1005 Е.Г. *

Разработка

   action="http://localhost:8080/_ah/upload/ag50cy1zY2gtcmVwb3J0c3IbCxIVX19CbG9iVXBsb2FkU2Vzc2lvbl9fGAEM"

Производственное действие:

    action="http://website.appspot.com/_ah/upload/AMmfu6Yer2BJaT_tW_fmc- PKvHaOHD3pnv5QH6o6d8XQQujbCWg5egbjf2sGxP5_cN6uAyvgDVOn8U40wLLXEvoQcrMDbHQQByJpTlamzBPz_8x8LN2UWKM/ALBNUaYAAAAAT1EmxMkvj7tiS9WAvYAWKPG1sN1DvmMk/"

Когда я исследую в журналах, сервер разработки заявляет, что действие: "/ Ag50cy1zY2gtcmVwb3J0c3IbCxIVX19CbG9iVXBsb2FkU2Vzc2lvbl9fGAEM"

Где, как указано в журналах производства, действие: "/ форма" (как и ожидалось)

Код для обоих одинаков ниже:

файл: upload.jsp

    <%
               request.getAttribute("message");

                BlobstoreService blobstoreService = BlobstoreServiceFactory.getBlobstoreService();
            %>

            <hr/>
            <p>Upload a .csv file to the system.</p>
            <fieldset>
                <legend>Upload File</legend>
                <form action="<%= blobstoreService.createUploadUrl("/upload/form") %>" method="post" enctype="multipart/form-data">
                    <label for="filename_1">File: </label>
                    <input id="filename_1" type="file" id="filename_1" name="file" size="30" onchange="checkInput();" /><br/>
                    <br/>
                    <input type="submit" id="submitBtn" value="Upload File" />
                </form>
            </fieldset>

файл: controller.java

    else if (action.equals("/form")) {
            Logger.getLogger(Controller3.class.getName()).log(Level.INFO, action);

            Map<String, List<BlobKey>> blobs = blobstoreService.getUploads(request);
            List<BlobKey> bkList = blobs.get("filename_1");
            BlobKey blobKey = bkList.get(0);

            if (blobKey == null) {
                Logger.getLogger(Controller3.class.getName()).log(Level.WARNING, "Blob null");
                response.sendRedirect("/");
            } else {
                Logger.getLogger(Controller3.class.getName()).log(Level.WARNING, "Blob not null");
                FileService fileService = FileServiceFactory.getFileService();

                // Create a new Blob file with mime-type "text/plain"
                AppEngineFile file = fileService.getBlobFile(blobKey);// Again, different standard Java ways of reading from the channel.
                FileReadChannel readChannel = fileService.openReadChannel(file, false);
                Reader reader1 = new BufferedReader(Channels.newReader(readChannel, "UTF8"));

                char c = ',';
                CSVReader reader = new CSVReader(reader1, c);

                ArrayList<ArrayList<String>> results = reader.getResults();
                ArrayList<String> columns = reader.getColumns();

                request.setAttribute("maxColumns", columns);
                request.setAttribute("csvResults", results);

                //Remove the CSV file from the blobstore now we have used it.
                blobstoreService.delete(blobKey);
                this.getServletContext().setAttribute("csvUploadResults", results);
            }

Файл web.xml был настроен для обработки запросов: / _ah / upload / , / upload / , / _ah / upload / upload / *

Я надеюсь, что есть простое объяснение (вероятно, есть), почему код работает в производстве, но не в разработке.

Любая помощь будет очень полезна.

1 Ответ

2 голосов
/ 15 марта 2012

В настоящее время я тоже борюсь с Blobstore.

Замечу, вы сказали: Файл web.xml был настроен для обработки запросов: / _ah / upload /, / upload /, / _ah / upload / upload / *

Но учтите, что ПОСЛЕ того, как хранилище BLOB-объектов обработало запрос на добавление вашего BLOB-объекта (отправив по URL-адресу, который вы получили, createUploadUrl ("/ upload")) Затем он вызовет ВАШ метод, сопоставленный с "/ upload" в web.xml. Таким образом, вы определенно хотите удалить любые ссылки web.xml на / _ah / upload /, поскольку это то, что будет перехватывать хранилище BLOB-объектов.

Я сделал это некоторое время и получал ошибку сервера 500 без всякой регистрации.

...