私はJava Webアプリを持っています。ユーザーは (POST 要求を介して) ファイルをアップロードでき、サーブレットはこのファイルに対していくつかのコードを実行します。このコードの出力は文字列です。
サーバー側でファイルを作成せずに、ファイルをユーザーに返す方法は? それは可能ですか?
はい、コンテンツ処理ヘッダーを設定してから、ストリームを応答に書き込む必要があります。
そのコードを使用してみてください
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からすべての情報を取得しました
より正確な情報については、それをご覧ください。