0

私はJava Webアプリを持っています。ユーザーは (POST 要求を介して) ファイルをアップロードでき、サーブレットはこのファイルに対していくつかのコードを実行します。このコードの出力は文字列です。

サーバー側でファイルを作成せずに、ファイルをユーザーに返す方法は? それは可能ですか?

4

2 に答える 2

1

はい、コンテンツ処理ヘッダーを設定してから、ストリームを応答に書き込む必要があります。

于 2013-10-08T07:27:07.783 に答える
0

そのコードを使用してみてください

package com.hainasoft.web;

import java.io.DataInputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;

import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class DownloadServlet extends javax.servlet.http.HttpServlet implements
        javax.servlet.Servlet {
    static final long serialVersionUID = 1L;
    private static final int BUFSIZE = 4096;
    private String filePath;

    public void init() {
        // the file data.xls is under web application folder
        filePath = getServletContext().getRealPath("") + File.separator + "data.xls";
    }

    protected void doGet(HttpServletRequest request,
            HttpServletResponse response) throws ServletException, IOException {
        File file = new File(filePath);
        int length   = 0;
        ServletOutputStream outStream = response.getOutputStream();
        ServletContext context  = getServletConfig().getServletContext();
        String mimetype = context.getMimeType(filePath);

        // sets response content type
        if (mimetype == null) {
            mimetype = "application/octet-stream";
        }
        response.setContentType(mimetype);
        response.setContentLength((int)file.length());
        String fileName = (new File(filePath)).getName();

        // sets HTTP header
        response.setHeader("Content-Disposition", "attachment; filename=\"" + fileName + "\"");

        byte[] byteBuffer = new byte[BUFSIZE];
        DataInputStream in = new DataInputStream(new FileInputStream(file));

        // reads the file's bytes and writes them to the response stream
        while ((in != null) && ((length = in.read(byteBuffer)) != -1))
        {
            outStream.write(byteBuffer,0,length);
        }

        in.close();
        outStream.close();
    }
}

mymeタイプを設定することが重要です

mimetype = "application/octet-stream";

これにより、ユーザーにダウンロードダイアログを設定します

response.setHeader("Content-Disposition", "attachment; filename=\"" + fileName + "\"");

http://www.java-forums.org/blogs/servlet/668-how-write-servlet-sends-file-user-download.htmlからすべての情報を取得しました

より正確な情報については、それをご覧ください。

于 2013-10-08T07:27:42.850 に答える