2

私はGWTを使用しています。

サーバーからクライアントにファイル file をダウンロードする必要があります。

ドキュメントは外部リポジトリにあります。

クライアントは、サーブレットを介してドキュメントの ID を送信します。

サーバー側: この ID ドキュメントを使用して取得されます:

Document document = (Document)session.getObject(docId);
ContentStream contentStream = document.getContentStream();

ByteArrayInputStream inputStream = (ByteArrayInputStream) contentStream.getStream();

int c;
while ((c = inputStream.read()) != -1) {
    System.out.print((char) c); 
}
String mime = contentStream.getMimeType();
String name = contentStream.getFileName();
InputStream strm = contentStream.getStream();

ここで文書を読むことができます。

これをクライアントに送信したいと思います。これをファイルにしてクライアントに送り返すにはどうすればよいですか?

4

2 に答える 2

3

あなたのサーブレットで:

Document document =(Document)session.getObject(docId);
ContentStream contentStream = document.getContentStream();
String name = contentStream.getFileName();
response.setHeader("Content-Type", "application/octet-stream;");
response.setHeader("Content-Disposition", "attachment;filename=\"" + name + "\"");
OutputStream os = response.getOutputStream();
InputStream is = 
  (ByteArrayInputStream) contentStream.getStream();
BufferedInputStream buf = new BufferedInputStream(is);
int readBytes=0;
while((readBytes=buf.read())!=-1) {
      os.write(readBytes);
}   
os.flush();
os.close();// *important*
return; 
于 2012-08-24T14:18:16.867 に答える
1

サーバー側で標準サーブレット (拡張HttpServletではなくRemoteServiceServlet) を作成し、クライアント側で id をサーブレット パラメータとして送信することができます。

リクエストを取得したら、Excel ファイルを作成してクライアントに送信する必要があります。ブラウザにダウンロード ダイアログ ボックスが自動的にポップアップ表示されます。ただし、正しい content-type 応答ヘッダーを設定していることを確認する必要があります。このヘッダーは、ファイルの種類をブラウザに指示します。

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

String fileId = reguest.getParameter("fileId"); // value of file id from request
File file = CreatorExel.getFile(fileId); // your method to create file from helper class

// setting response headers
response.setHeader("Content-Type", getServletContext().getMimeType(file.getName())); 
response.setHeader("Content-Length", file.length()); 
response.setHeader("Content-Disposition", "inline; filename=\"" + file.getName() + "\""); 

BufferedInputStream input = null; 
BufferedOutputStream output = null; 

try { 
    InputStream inputStream = new FileInputStream(file);
    ServletOutputStream outputStream = response.getOutputStream();

    input = new BufferedInputStream(fileInput); 
    output = new BufferedOutputStream(outputStream); 

    int count;
    byte[] buffer = new byte[8192]; //  buffer size is 512*16
    while ((count = input.read(buffer)) > 0) {
         output.write(buffer, 0, count);
    }

} finally { 
    if (output != null) {
       try { 
          output.close(); 
       } catch (IOException ex) {
       } 
    }
    if (input != null) {
       try { 
          input.close(); 
       } catch (IOException ex) {
       } 
    } 
} 
于 2012-08-24T14:20:58.567 に答える