当前位置: 首页 > 知识库问答 >
问题:

通过RestyGWT使用FileUpload从GWT客户端传输文件

施冠玉
2023-03-14

我有一个gwt客户端,现在我正在尝试将用户的文件(图像)传输到服务器并保存它们。你能解释一下如何通过RestyGWT使用FileUpload从GWT传输文件吗。我发现有必要使用FormPanel,我认为我必须使用setAction()和submit()方法,但我使用的是RestyGWT,我不明白如何通过RestyGWT传输数据?

客户端:

private FormPanel fileUploadPanel;
private FileUpload fileUpload;
private void create() {
//Some code //
    fileUpload = new FileUpload();
    fileUploadPanel = new FormPanel();
    fileUploadPanel.setMethod(FormPanel.METHOD_POST);
    fileUploadPanel.setEncoding(FormPanel.ENCODING_MULTIPART);
    fileUpload.setName("upload");
    fileUploadPanel.setAction("http://localhost:8080/api/events/upload");
    fileUploadPanel.add(fileUpload);
//Some code//
}


 @POST
 @Path("UPLOAD_PATH")
 void uploadImage(/*i don't know how what must be here */,
             MethodCallback callback);

服务器端:

 @Path("/upload")
 @POST
 @Consumes(MediaType.MULTIPART_FORM_DATA)
 public void uploadImage(
        @FormDataParam("upload") InputStream uploadedInputStream,
        @FormDataParam("upload") FormDataContentDisposition fileDetail) {

    String uploadedFileLocation = "some_path" + fileDetail.getFileName();

    writeToFile(uploadedInputStream, uploadedFileLocation);

}

共有1个答案

万俟沛
2023-03-14

客户端

public UploadPanel()
{
   Div div = new Div();

   final FormPanel formPanel = new FormPanel();
   formPanel.setEncoding(FormPanel.ENCODING_MULTIPART);
   formPanel.setMethod(FormPanel.METHOD_POST);
   formPanel.setAction("uploadFileServletUrl");
   formPanel.addSubmitCompleteHandler(new FormPanel.SubmitCompleteHandler()
   {
      @Override
      public void onSubmitComplete(SubmitCompleteEvent event)
      {
         GWT.log("event.getResults = " + event.getResults());
      }
   });

   FileUpload fileUpload = new FileUpload();
   fileUpload.getElement().setAttribute("multiple", null);
   fileUpload.setName("abcupload");
   div.add(fileUpload);
   Hidden hidden = new Hidden("id", "8"); //just an example of how to pass a parameter
   div.add(hidden);

   Button butUpload = new Button("Upload");
   div.add(butUpload);
   butUpload.addClickHandler(new ClickHandler()
   {
      @Override
      public void onClick(ClickEvent event)
      {
          formPanel.submit();
      }
   });

   formPanel.add(div);
   this.initWidget(formPanel);
}

这将向服务器发布一个标准的多部分请求。在那里,您只需读取部分(在此示例中,您将有一个“id”部分和一个“abcupload”部分,这将是文件)。

我不能发布任何Java服务器端代码,因为我总是使用C#作为服务器端,但这应该只是在多部分post请求中读取的标准方式。

 类似资料:
  • 下面的代码展示了如何使用一个通用的多路上传解析器CommonsMultipartResolver: <bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver"> <!-- 支持的其中一个属性,支持的最大文件大小,以字节为单位 -->

  • 我正在尝试重建一个与elasticsearch 2.4对话的插件,以便与elasticsearch 5配合使用。 代码来自:https://github.com/pentaho/pentaho-kettle/blob/master/plugins/elasticsearch-bulk-insert/src/org/pentaho/di/trans/steps/elasticsearchbulk/E

  • 问:在支持服务器的java应用程序中,是否可以在Spring使用websocket将数据从服务器发送到客户端,而不创建另一个客户端? 互联网上几乎所有关于spring中websocket的文章都展示了如何在控制器中定义方法来处理请求。当他们用两个注解@MessageMapping("/news ")、@SendTo("/topic/news ")定义一个函数时,所有的神奇似乎都发生了。单凭这个方法

  • 从Java使用弹性搜索的最佳实践是什么?例如,可以使用REST API轻松找到留档和逐个查询删除功能的示例。传输客户端Java情况并非如此。 在哪里可以找到Java Transport Client的使用示例 Java Transport Client是否通过REST API覆盖了整个ElasticSearch功能,比如HTTP客户端

  • 问题内容: 我设法将文件从客户端大块上传到服务器,但是现在我想实现相反的方式。不幸的是,此部分缺少官方模块页面上的文档。 我要执行以下操作: 向服务器发出流和带有文件名的“下载”事件 服务器应创建一个readstream并将其通过管道传输到客户端发出的流 当客户端到达流时,将出现一个下载弹出窗口,并询问将文件保存在何处 我不想使用简单的文件超链接的原因令人困惑:服务器上的文件已加密并重命名,因此我

  • 问题内容: 我正在尝试在服务器和客户端之间进行文件传输,但是工作非常糟糕。基本上需要发生的是: 1)客户端将txt文件发送到服务器(我称为“ quotidiani.txt”) 2)服务器将其保存在另一个txt文件中(“ receive.txt”) 3)服务器运行脚本上对其进行修改并以其他名称保存(“ output.txt”)的脚本 。4)服务器将文件发送回客户端,客户端以相同的名称(final.t