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