所以我是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文件夹已成功创建,文件放在那里。
此时我有点陷入困境,我一直在研究,但似乎无法找到一个明确的简明答案,说明我在客户端访问上传文件的最佳方式是为了操纵它们然后允许用户下载它们。也许我正在接近这个错误,我不确定。如果有人可以指出我正确的方向,或者向我展示一些很好的例子来说明做正确的事情,那就谢谢了。
答案 0 :(得分:0)
要在客户端访问该文件,您需要一个新的servlet或与doGet
方法一起使用的servlet。
客户端应根据文件类型通过Anchor
或Image
请求文件,但添加参数以便服务器能够识别文件。通常,您可以使用您用于上传的FileInput
的名称,也可以从服务器返回标签。
我建议您尝试gwt-upload,这会为您节省很多时间。
答案 1 :(得分:0)
我解决了我的问题。文件成功上传后,我存储了文件名。后来我使用RPC访问服务器上的文件。我将文件名传递给RPC,以便它知道我正在处理什么文件,然后在上传文件夹中查找该文件。所以我可以像这样创建java文件,
File file = new File((this.getServletContext().getRealPath("uploadedFiles") + File.separator + fileName));
并操纵它我认为合适。