Загрузка файла в Google Engine - PullRequest
3 голосов
/ 24 июля 2011

Я собираюсь использовать движок приложений Google Blobstore для хранения своих загруженных файлов. Тип файла может быть любым (.txt, .pdf, .docx и т. Д.) Я написал следующий сервлет для загрузки сохраненных файлов в движок приложений Google Blobstore.

public class Serve extends HttpServlet { 

private BlobstoreService blobstoreService = BlobstoreServiceFactory.getBlobstoreService();

public void doGet (требование HttpServletRequest, разрешение HttpServletResponse) выдает IOException {

    BlobKey blobKey = new BlobKey(req.getParameter("blob-key"));
    blobstoreService.serve(blobKey, res);      

}

}

Но каждый раз, когда я запрашиваю файл, давая URL, как показано ниже, http://127.0.0.1:8888/serve?blob-key=DEHQ3U_2wtUdEL7XPI434Q файл скачивается красиво. Но нет расширения для файла. И имя файла всегда «служить» Что я должен сделать, чтобы загрузить загруженный файл с оригинальным именем файла? Спасибо,

Ответы [ 2 ]

4 голосов
/ 26 декабря 2011

Я использовал следующий код для обслуживания большого двоичного объекта, передав ключ-блоб как строку в мой Serve.java.Файл загружается с использованием исходного имени файла, а также оригинального расширения.Нашел более подробное обсуждение на http://onjava.com/onjava/excerpt/jebp_3/index3.html

BlobstoreService blobstoreService = BlobstoreServiceFactory.getBlobstoreService();
BlobInfoFactory bi = new BlobInfoFactory();
BlobKey blobKey = new BlobKey(req.getParameter("blob-key"));
String fname = bi.loadBlobInfo(blobKey).getFilename();
res.setContentType("application/x-download");
res.setHeader("Content-Disposition", "attachment; filename=" + fname);
blobstoreService.serve(blobKey, res);
3 голосов
/ 25 июля 2011

Я знаю, что в python есть опция send_as, которая автоматически устанавливает имя файла для ответа, но я думаю, что в Java вам нужно будет добавить заголовок Content-Disposition к ответу, например:

Content-Disposition: attachment; filename=your-file.docx; 

BlobInfo для вашего блоба сохраняет исходное имя файла, и вы можете получить его через getFilename

...