3

アップロードしたファイルを保存するには、GoogleAppEngineのBlobstoreを使用します。ファイルの種類は何でもかまいません(.txt、.pdf、.docxなど)Google AppEngineBlobstoreに保存されているファイルをダウンロードするために次のサーブレットを作成しました。

public class Serve extends HttpServlet { 

private BlobstoreService blobstoreService = BlobstoreServiceFactory.getBlobstoreService();

public void doGet(HttpServletRequest req、HttpServletResponse res)は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 ファイルが適切にダウンロードされます。ただし、ファイルの拡張子はありません。また、ファイルの名前は常に「serve」です。アップロードされたファイルをファイルの元の名前でダウンロードするにはどうすればよいですか?ありがとう、

4

2 に答える 2

4

次のコードを使用して、blob-keyを文字列としてServe.javaに渡すことにより、blobを提供しました。ファイルは、元のファイル名と元の拡張子を使用してダウンロードされます。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);
于 2011-12-25T21:19:15.117 に答える
3

send_asPythonには応答のファイル名を自動的に設定するオプションがあることは知っていますが、Javaでは次Content-Dispositionのように応答にヘッダーを追加する必要があると思います:

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

ブロブの BlobInfo は元のファイル名を保持し、次の方法で取得できますgetFilename

于 2011-07-24T20:15:18.930 に答える