- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我在GWT中开发了一个小应用程序,在进行一些操作后上传和下载文件,它工作正常,但加载对话框图像在文件下载后永远不会停止,请建议。
客户端代码
public class Firstmodule implements EntryPoint
{
public void onModuleLoad()
{
final PopupPanel popup = new PopupPanel(false, true); // Create a modal dialog box that will not auto-hide
final FileUpload fileUpload = new FileUpload();
final FormPanel form = new FormPanel();
VerticalPanel vPanel = new VerticalPanel();
Image img = new Image("download.png");
vPanel.add(img);
form.setMethod(FormPanel.METHOD_POST);
// The HTTP request is encoded in multipart format.
form.setEncoding(FormPanel.ENCODING_MULTIPART);
form.setTitle("Family_Common_Fet");
form.setAction(GWT.getHostPageBaseURL() + "FileUploadGreeting");
form.setWidget(vPanel);
fileUpload.setName("uploader");
vPanel.add(fileUpload);
vPanel.setSpacing(20);
Label maxUpload = new Label();
maxUpload.setText("Text input file header: Datasheet, Vendor Code");
vPanel.add(maxUpload);
final Button submit = new Button("Upload and Run");
vPanel.add(submit);
submit.addClickHandler(new ClickHandler() {
public void onClick(ClickEvent event)
{
String filename = fileUpload.getFilename();
if(!filename.endsWith(".txt"))
{
System.out.println(filename);
Window.alert("only *.txt files accepted");
return;
}
else if(filename.length() == 0)
{
Window.alert("Please Select Text File");
return;
}
else
{
// loading dialog image
popup.add(new Image("loading_animation1.gif"));
popup.setGlassEnabled(true); // Enable the glass panel
popup.center(); // Center the popup and make it visible
submit.setEnabled(false);
submit.setFocus(true);
form.submit();
}
}
});
// Add an event handler to the form.
form.addSubmitHandler(new FormPanel.SubmitHandler() {
public void onSubmit(SubmitEvent event)
{
// This event is fired just before the form is submitted. We can take
// this opportunity to perform validation.
}
});
form.addSubmitCompleteHandler(new FormPanel.SubmitCompleteHandler() {
public void onSubmitComplete(SubmitCompleteEvent event)
{
//trying to stop the loading dialodg
popup.setGlassEnabled(false);
submit.setEnabled(true);
form.reset();
}
});
DecoratorPanel decPanel = new DecoratorPanel();
decPanel.setWidget(form);
RootPanel.get("uploadContainer").add(decPanel);
}
servlet 代码
public class UploadFileHandler extends HttpServlet
{
private static final long serialVersionUID = 1L;
public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException
{
System.out.println("Inside doPost");
// Create a factory for disk-based file items
FileItemFactory factory = new DiskFileItemFactory();
// Create a new file upload handler
ServletFileUpload fileUpload = new ServletFileUpload(factory);
// sizeMax - The maximum allowed size, in bytes. The default value of -1 indicates, that there is no limit.
// 1048576 bytes = 1024 Kilobytes = 1 x 10 Megabyte
fileUpload.setSizeMax(10485760);
System.out.println(request.getRemoteAddr());
if(!ServletFileUpload.isMultipartContent(request))
{
try
{
throw new FileUploadException("error multipart request not found");
}catch(FileUploadException e)
{
// TODO Auto-generated catch block
e.printStackTrace();
}
}
try
{
List<FileItem> items = fileUpload.parseRequest(request);
if(items == null)
{
response.getWriter().write("File not correctly uploaded");
return;
}
Iterator<FileItem> iter = items.iterator();
String absofilepath = null;
String fileName = null;
String filepath = "temp//fileOutput_" + System.currentTimeMillis() + ".txt";
while(iter.hasNext())
{
FileItem item = (FileItem) iter.next();
////////////////////////////////////////////////
// http://commons.apache.org/fileupload/using.html
////////////////////////////////////////////////
// if (item.isFormField()) {
fileName = item.getName();
System.out.println("fileName is : " + fileName);
String typeMime = item.getContentType();
System.out.println("typeMime is : " + typeMime);
int sizeInBytes = (int) item.getSize();
System.out.println("Size in bytes is : " + sizeInBytes);
// byte[] file = item.get();
absofilepath = getServletContext().getRealPath(filepath);
item.write(new File(absofilepath));
// }
}
String request_ip = getClientIpAddr(request);
System.out.println("Request IP:" + request_ip);
String tempoutFile = "output//" + fileName + System.currentTimeMillis() + ".txt";
String absooutFile = getServletContext().getRealPath(tempoutFile);
System.out.println("ouput file : " + absooutFile);
//************ some other operations in code*******///
}catch(Exception e){
e.printStackTrace();
PrintWriter out = response.getWriter();
response.setHeader("Content-Type", "text/html");
out.println("an Error has occuredin Exporter.bat" + e);
out.flush();
out.close();
}
// ****************************Downlaod **********************************//
downloadFile(request, response, absooutFile);
/*when i sing hashed code below it's return error in console and didn't stop the loading dialog image */
// PrintWriter out = response.getWriter();
// response.setHeader("Content-Type", "text/html");
// out.println("Check output File");
// System.out.println("Upload Ok");
// out.flush();
// out.close();
}catch(SizeLimitExceededException e)
{
System.out.println("File size exceeds the limit : 10 MB!!");
PrintWriter out = response.getWriter();
response.setHeader("Content-Type", "text/html");
out.println("Maximum file size should not exceed 10MB!!");
out.flush();
out.close();
}catch(Exception e)
{
e.printStackTrace();
PrintWriter out = response.getWriter();
response.setHeader("Content-Type", "text/html");
out.println("an Error has occured");
out.flush();
out.close();
}
}
public static String getClientIpAddr(HttpServletRequest request)
{
String ip = request.getHeader("X-Forwarded-For");
if(ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip))
{
ip = request.getHeader("Proxy-Client-IP");
}
if(ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip))
{
ip = request.getHeader("WL-Proxy-Client-IP");
}
if(ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip))
{
ip = request.getHeader("HTTP_CLIENT_IP");
}
if(ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip))
{
ip = request.getHeader("HTTP_X_FORWARDED_FOR");
}
if(ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip))
{
ip = request.getRemoteAddr();
}
return ip;
}
private void downloadFile(HttpServletRequest req, HttpServletResponse resp, String filePath)
{
try
{
File f = new File(filePath);
int length = 0;
ServletOutputStream op = resp.getOutputStream();
ServletContext context = getServletConfig().getServletContext();
String mimetype = context.getMimeType(filePath);
resp.setContentType((mimetype != null) ? mimetype : "application/octet-stream");
resp.setContentLength((int) f.length());
resp.setHeader("Content-Disposition", "attachment; filename=Fam_Com_Fet.txt");
DataInputStream in = new DataInputStream(new FileInputStream(f));
byte[] bbuf = new byte[in.available()];
while((in != null) && ((length = in.read(bbuf)) != -1))
{
op.write(bbuf, 0, length);
}
in.close();
op.flush();
op.close();
// f.delete();
}catch(IOException ioe)
{
ioe.printStackTrace();
}
}
public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException
{
doPost(request, response);
}
谢谢
最佳答案
SubmitCompleteHandler
仅保证在服务器发回 HTML 时被调用,(请参阅 javadoc)它不适用于任意文件下载。
关于java - 使用 GWT 中的 servlet 下载文件后表单操作没有休息?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37060085/
我正在努力做到这一点 在我的操作中从数据库获取对象列表(确定) 在 JSP 上打印(确定) 此列表作为 JSP 中的可编辑表出现。我想修改然后将其提交回同一操作以将其保存在我的数据库中(失败。当我使用
我有以下形式的 Linq to Entities 查询: var x = from a in SomeData where ... some conditions ... select
我有以下查询。 var query = Repository.Query() .Where(p => !p.IsDeleted && p.Article.ArticleSections.Cou
我正在编写一个应用程序包,其中包含一个主类,其中主方法与GUI类分开,GUI类包含一个带有jtabbedpane的jframe,它有两个选项卡,第一个选项卡包含一个jtable,称为jtable1,第
以下代码产生错误 The nested query is not supported. Operation1='Case' Operation2='Collect' 问题是我做错了什么?我该如何解决?
我已经为 HA redis 集群(2 个副本、1 个主节点、3 个哨兵)设置了本地 docker 环境。只有哨兵暴露端口(10021、10022、10023)。 我使用的是 stackexchange
我正在 Desk.com 中构建一个“集成 URL”,它使用 Shopify Liquid 模板过滤器语法。对于开始日期为 7 天前而结束日期为现在的查询,此 URL 需要包含“开始日期”和“结束日期
你一定想过。然而情况却不理想,python中只能使用类似于 i++/i--等操作。 python中的自增操作 下面代码几乎是所有程序员在python中进行自增(减)操作的常用
我需要在每个使用 github 操作的手动构建中显示分支。例如:https://gyazo.com/2131bf83b0df1e2157480e5be842d4fb 我应该显示分支而不是一个。 最佳答
我有一个关于 Perl qr 运算符的问题: #!/usr/bin/perl -w &mysplit("a:b:c", /:/); sub mysplit { my($str, $patt
我已经使用 ArgoUML 创建了一个 ERD(实体关系图),我希望在一个类中创建两个操作,它们都具有 void 返回类型。但是,我只能创建一个返回 void 类型的操作。 例如: 我能够将 book
Github 操作仍处于测试阶段并且很新,但我希望有人可以提供帮助。我认为可以在主分支和拉取请求上运行 github 操作,如下所示: on: pull_request push: b
我正在尝试创建一个 Twilio 工作流来调用电话并记录用户所说的内容。为此,我正在使用 Record,但我不确定要在 action 参数中放置什么。 尽管我知道 Twilio 会发送有关调用该 UR
我不确定这是否可行,但值得一试。我正在使用模板缓冲区来减少使用此算法的延迟渲染器中光体积的过度绘制(当相机位于体积之外时): 使用廉价的着色器,将深度测试设置为 LEQUAL 绘制背面,将它们标记在模
有没有聪明的方法来复制 和 重命名 文件通过 GitHub 操作? 我想将一些自述文件复制到 /docs文件夹(:= 同一个 repo,不是远程的!),它们将根据它们的 frontmatter 重命名
我有一个 .csv 文件,其中第一列包含用户名。它们采用 FirstName LastName 的形式。我想获取 FirstName 并将 LastName 的第一个字符添加到它上面,然后删除空格。然
Sitecore 根据 Sitecore 树中定义的项目名称生成 URL, http://samplewebsite/Pages/Sample Page 但我们的客户有兴趣降低所有 URL(页面/示例
我正在尝试进行一些计算,但是一旦我输入金额,它就会完成。我只是希望通过单击按钮而不是自动发生这种情况。 到目前为止我做了什么: Angular JS - programming-fr
我的公司创建了一种在环境之间移动文件的复杂方法,现在我们希望将某些构建的 JS 文件(已转换和缩小)从一个 github 存储库移动到另一个。使用 github 操作可以实现这一点吗? 最佳答案 最简
在我的代码中,我创建了一个 JSONArray 对象。并向 JSONArray 对象添加了两个 JSONObject。我使用的是 json-simple-1.1.jar。我的代码是 package j
我是一名优秀的程序员,十分优秀!