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

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

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

Java脚本:

  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);

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

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

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

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

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);

What is important to know, to be able to deal on the server side with a FormData form, is that it is the same as regular form that has been sent with the encoding multipart/form-data.

这对于 Struts2 fileUpload interceptor 能够在调用操作时处理它很重要。

为了进一步学习,我建议您阅读 How can I upload files asynchronously?