【问题标题】:How to send an audio blob (data) file from JavaScript to Java server action in Struts 2?如何将音频 blob(数据)文件从 JavaScript 发送到 Struts 2 中的 Java 服务器操作?
【发布时间】:2015-03-23 06:57:35
【问题描述】:

我们正在使用 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 配置来接收它。

【问题讨论】:

  • 调用action url,传递音频,而不是getAudio
  • 如果您想获取数据文件,请不要将其作为 blob 发送。
  • @AndreaLigios,如何通过 url 传递音频?以及如何接收?
  • @RomanC,有没有办法在 javascript 中将 blob 转换为文件?

标签: javascript java ajax file-upload struts2


【解决方案1】:

在 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 拦截器在调用操作时能够处理它很重要。

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

【讨论】:

  • 谢谢你救了我的命 :)
  • 嗨 Roman,有没有办法将音频 blob 转换为 wav/amr 格式?
猜你喜欢
  • 2018-01-21
  • 2016-12-11
  • 1970-01-01
  • 2019-12-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-01-07
相关资源
最近更新 更多