所以我是 GWT 的新手,我不确定我想要做的最好的编程实践是什么。在我的 Web 应用程序中,用户将能够上传数据文件,我的应用程序需要能够访问该文件,对其执行一些操作,然后让用户下载处理过的文件。
到目前为止,我已经能够使用此 doPost 方法成功上传带有上传 servlet 的文件:
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
try {
DiskFileItemFactory fileItemFactory = new DiskFileItemFactory();
ServletFileUpload fileUpload = new ServletFileUpload(fileItemFactory);
fileUpload.setSizeMax(FILE_SIZE_LIMIT);
List<FileItem> items = fileUpload.parseRequest(req);
for (FileItem item : items) {
if (item.isFormField()) {
logger.log(Level.INFO, "Received form field:");
logger.log(Level.INFO, "Name: " + item.getFieldName());
logger.log(Level.INFO, "Value: " + item.getString());
} else {
logger.log(Level.INFO, "Received file:");
logger.log(Level.INFO, "Name: " + item.getName());
logger.log(Level.INFO, "Size: " + item.getSize());
}
if (!item.isFormField()) {
if (item.getSize() > FILE_SIZE_LIMIT) {
resp.sendError(HttpServletResponse.SC_REQUEST_ENTITY_TOO_LARGE, "File size exceeds limit");
return;
}
String fileName = item.getName();
if (fileName != null) {
fileName = FilenameUtils.getName(fileName);
}
fileName = getServletContext().getRealPath("/uploadedFiles/" + fileName);
byte[] data = item.get();
FileOutputStream fileOutSt = new FileOutputStream(fileName);
fileOutSt.write(data);
fileOutSt.close();
if (!item.isInMemory())
item.delete();
}
}
} catch (Exception e) {
logger.log(Level.SEVERE, "Throwing servlet exception for unhandled exception", e);
throw new ServletException(e);
}
}
当我查看我的 war 文件夹时,uploadFiles 文件夹已成功创建并将文件放在那里。
在这一点上,我有点卡住了,我一直在研究,但似乎无法找到一个明确简洁的答案,说明什么是我在客户端访问上传文件以操作它们然后允许用户的最佳方式下载它们。也许我正在接近这个错误,我不确定。如果有人能指出我正确的方向或向我展示一些做事的正确方法的好例子,那就太好了,谢谢。