GWT上传/下载最佳实践
因此,我是GWT新手,不确定我要做的事情的最佳编程实践是什么。在我的web应用程序中,用户将能够上传数据文件,我的应用程序需要能够访问该文件,对其执行一些操作,然后让用户下载被操纵的文件 到目前为止,我已经能够使用此doPost方法成功地使用上载servlet上载文件:GWT上传/下载最佳实践,gwt,rpc,Gwt,Rpc,因此,我是GWT新手,不确定我要做的事情的最佳编程实践是什么。在我的web应用程序中,用户将能够上传数据文件,我的应用程序需要能够访问该文件,对其执行一些操作,然后让用户下载被操纵的文件 到目前为止,我已经能够使用此doPost方法成功地使用上载servlet上载文件: protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
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);
}
}
protectedvoiddopost(HttpServletRequest-req,HttpServletResponse-resp)抛出ServletException,IOException{
试一试{
DiskFileItemFactory fileItemFactory=新的DiskFileItemFactory();
ServletFileUpload fileUpload=新建ServletFileUpload(fileItemFactory);
fileUpload.setSizeMax(文件大小限制);
列表项=fileUpload.parseRequest(req);
用于(文件项:项){
if(item.isFormField()){
logger.log(Level.INFO,“接收表单字段:”);
logger.log(Level.INFO,“Name:+item.getFieldName());
logger.log(Level.INFO,“Value:+item.getString());
}否则{
logger.log(Level.INFO,“接收文件:”);
logger.log(Level.INFO,“Name:+item.getName());
logger.log(Level.INFO,“Size:+item.getSize());
}
如果(!item.isFormField()){
if(item.getSize()>文件大小限制){
响应发送错误(HttpServletResponse.SC_请求_实体_太大,“文件大小超出限制”);
返回;
}
字符串文件名=item.getName();
如果(文件名!=null){
fileName=FilenameUtils.getName(fileName);
}
fileName=getServletContext().getRealPath(“/uploadedFiles/”+fileName);
字节[]数据=项。获取();
FileOutputStream fileOutSt=新的FileOutputStream(文件名);
FileOutt.write(数据);
fileoutt.close();
如果(!item.isInMemory())
项目.删除();
}
}
}捕获(例外e){
logger.log(Level.severy,“为未处理的异常引发servlet异常”,e);
抛出新的ServletException(e);
}
}
当我查看war文件夹时,已成功创建uploadedFiles文件夹,并将文件放在那里
在这一点上,我有点卡住了,我一直在研究,但似乎找不到一个清晰简洁的答案,关于什么是最好的方式,让我访问客户端上传的文件,以便操纵它们,然后允许用户下载它们。也许我在处理这个问题上错了,我不确定。如果有人能给我指出正确的方向,或者给我展示一些正确方法的好例子,那就太好了,谢谢。要在客户端访问该文件,您需要一个新的servlet或与
doGet
方法一起使用的servlet
客户端应根据文件类型通过锚定
或图像
请求文件,但需添加参数,以便服务器能够识别文件。通常,您可以使用用于上载的FileInput
的名称,也可以从服务器返回标记
我建议您尝试一下,这样会为您节省很多时间。我解决了我的问题。成功上传文件后,我存储了文件名。后来,我使用RPC访问服务器上的文件。我将文件名传递给RPC,以便它知道我正在处理的文件,然后它在上载文件夹中查找该文件。所以我可以像这样创建java文件
File file = new File((this.getServletContext().getRealPath("uploadedFiles") + File.separator + fileName));
然后以我认为合适的方式操作它。我已经使用moxiegroup gwt uploader获得了上传,但是,现在文件已经上传,我需要从中提取信息,以便在客户端使用。在客户端访问上传文件的最佳方法是什么我从未使用过moxiegroup的库,但是使用gwt upload library,uploader对象返回一个url来获取上传的文件
uploader.fileUrl()
。用户可以在下载之前编辑该文件???@您想要创建的文件是什么类型的?