Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/gwt/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 将文件上载到服务器,对其进行处理,创建新文件(txt文件)并提示保存_Java_Gwt - Fatal编程技术网

Java 将文件上载到服务器,对其进行处理,创建新文件(txt文件)并提示保存

Java 将文件上载到服务器,对其进行处理,创建新文件(txt文件)并提示保存,java,gwt,Java,Gwt,好的,到目前为止,我知道如何将文件上传到服务器并进行处理(post方法)。我还知道如何从服务器导出文件(get方法),但我不知道如何在同一个servlet/action中进行导出。我的意思是上传一个文件,处理它,创建一个txt(或其他类型的文件),然后提示用户保存新创建的文件。任何帮助都会很好。谢谢听起来你需要的东西都有了,你只需要把上传和下载结合起来 @RemoteServiceRelativePath("MyServlet") public class MyServlet extends H

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

听起来你需要的东西都有了,你只需要把上传和下载结合起来

@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();

    }

}
@RemoteServiceRelativePath(“MyServlet”)
公共类MyServlet扩展了HttpServlet{
@凌驾
受保护的最终作废doPost(最终HttpServletRequest请求、最终HttpServletResponse响应)
抛出ServletException、IOException{
FileItemFactory=new DiskFileItemFactory();
ServletFileUpload upload=新的ServletFileUpload(工厂);
字符串fileContent=“”;
试一试{
列表项=upload.parseRequest(req);
//items.get(0)非常容易出错,但对于本例来说已经足够好了
fileContent=IOUtils.toString(items.get(0.getInputStream(),Charset.forName(“UTF-8”));
}捕获(文件上载异常){
e、 printStackTrace();
}
字符串fileName=“fileName.txt”;
相应的setContentType(“文本/普通;字符集=UTF-8”);
相应的setHeader(“内容处置”、“附件;文件名=“+filename”);
OutputStream out=resp.getOutputStream();
out.write(fileContent.getBytes(Charset.forName(“UTF-8”));
out.flush();
out.close();
}
}
在我的示例中,我使用ApacheCommonsFileUpload库来读取上传的文件,但是您提到您已经知道如何将其归档。但我把它包括进来是为了给出一个完整的例子,包括上传和下载。我自己也使用IOUtils将上传文件的
InputStream
转换为字符串

这个非常基本的示例读取上传文件的内容,并将其作为下载提供给客户端。因此,我们写入响应的
OutputStream
,并设置响应的相关头和内容类型

其他需要知道的事情 如果可能的话,避免创建带有处理结果的文件(在服务器上),因为下载后必须将其删除,这是非常棘手的

此外,此示例不包含任何身份验证,并且具有非常(!)的基本错误处理。您应该始终检查请求是否有效,如果没有设置正确的(
resp.senderro()
)http状态代码(401400,…)。如果处理失败,还应设置相应的状态代码