好的,到目前为止我知道如何将文件上传到服务器并进行处理(post方法)。我也知道如何从服务器(get方法)导出文件,但我无法弄清楚如何在同一个servlet / action中执行它。我的意思是上传文件,处理它,创建一个txt(或其他类型的文件),然后提示用户保存新创建的文件。任何帮助都会很棒。感谢
答案 0 :(得分:0)
听起来你拥有所需的一切,你只需要结合上传和下载。
@RemoteServiceRelativePath("MyServlet")
public class MyServlet extends HttpServlet {
@Override
protected final void doPost(final HttpServletRequest req, final HttpServletResponse resp)
throws ServletException, IOException {
FileItemFactory factory = new DiskFileItemFactory();
ServletFileUpload upload = new ServletFileUpload(factory);
String fileContent = "";
try {
List<FileItem> items = upload.parseRequest(req);
//the items.get(0) is very error-prone, but good enough for this example
fileContent = IOUtils.toString(items.get(0).getInputStream(), Charset.forName("UTF-8"));
} catch (FileUploadException e) {
e.printStackTrace();
}
String fileName = "filename.txt";
resp.setContentType("text/plain;charset=UTF-8");
resp.setHeader("Content-Disposition", "attachment;filename=" + fileName);
OutputStream out = resp.getOutputStream();
out.write(fileContent.getBytes(Charset.forName("UTF-8")));
out.flush();
out.close();
}
}
在我的示例中,我使用Apache Commons FileUpload Library来读取上传的文件,但是您提到您已经知道如何存档它。但我将其包含在内,以提供上传和下载的完整示例。同样懒惰我自己使用IOUtils将上传文件的InputStream
转换为字符串。
这个非常基本的示例读取上传文件的内容,并将其作为下载提供给客户端。因此,我们写入响应的OutputStream
并设置相关标头和响应的内容类型。
如果可能,请避免使用处理结果(在服务器上)创建一个文件,因为在下载后你必须删除它,这非常棘手。
此示例不包含任何身份验证,并且具有非常(!)基本错误处理。您应该始终检查请求是否有效,如果没有设置正确的(resp.sendError()
)http状态代码(401,400,...)。如果处理失败,您还应该设置相应的状态代码。