如何在 Struts 2 中将音频 blob(数据)文件从 JavaScript 发送到 Java 服务器操作

How to send an audio blob (data) file from JavaScript to Java server action in Struts 2?

本文关键字:JavaScript 文件 操作 服务器 Java 数据 Struts blob 音频      更新时间:2023-09-26

我们正在使用Struts2应用程序,我想将JavaScript中录制的音频blob文件发送到Java服务器(Action类)。我正在使用以下 Ajax 代码发送 blob 文件。

JavaScript:

  var xhr=new XMLHttpRequest();
  xhr.onload=function(e) {
      if(this.readyState === 4) {
          console.log("Server returned: ",e.target.responseText);
      }
  };
  var fd=new FormData();
  fd.append("filename.wav",blob);
  xhr.open("POST","getAudio",true);
  xhr.send(fd);

我在Action课上的方法是getAudio()。因此,由于它是一个数据文件,我如何在我的方法中接收它并建议适当的XML配置来接收相同的文件。

在 Struts2 中,您可以为发送文件时将调用的操作创建 xml 配置。

<action name="getAudio" class="com.example.UploadAction" method="upload">
  <result>success.jsp</result>
</action>

该类应包括映射到操作的方法以及文件及其名称的属性。

public class UploadAction extends ActionSupport {
  private String name;
  private File file;
  //getter and setter
  public File getFile() {
    return file;
  }
  public void setFile(File file) {
    this.file = file;
  }
  public String getName() {
    return name;
  }
  public void setName(String name) {
    this.name = name;
  }
  public String upload() throws Exception{
      Files.move(file.toPath(),Paths.get("C:''tmp''"+name), StandardCopyOption.REPLACE_EXISTING);
      return SUCCESS;
  }
}

现在您应该将属性放在表单数据对象中

var xhr=new XMLHttpRequest();
xhr.onload=function(e) {
   if(this.readyState === 4) {
       console.log("Server returned: ",e.target.responseText);
   }
};
var fd=new FormData();
fd.append("name", "filename.wav");
fd.append("file", blob);
xhr.open("POST","getAudio",true);
xhr.send(fd);
重要的是要

知道,为了能够在服务器端处理FormData形式,它与使用编码multipart/form-data发送的常规形式相同。

这对于 Struts2 fileUpload拦截器来说很重要,因为它能够在调用操作时处理它。

为了进一步学习,我建议您阅读如何异步上传文件?。