将文件上传到服务器,处理它,创建新文件(txt文件)并提示保存

时间:2017-06-02 13:43:41

标签: java gwt

好的,到目前为止我知道如何将文件上传到服务器并进行处理(post方法)。我也知道如何从服务器(get方法)导出文件,但我无法弄清楚如何在同一个servlet / action中执行它。我的意思是上传文件,处理它,创建一个txt(或其他类型的文件),然后提示用户保存新创建的文件。任何帮助都会很棒。感谢

1 个答案:

答案 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,...)。如果处理失败,您还应该设置相应的状态代码。