【问题标题】:Post audio file from WP7 to App Engine server(Java)将音频文件从 WP7 发布到 App Engine 服务器(Java)
【发布时间】:2011-04-26 00:51:45
【问题描述】:

我有一个允许用户录制语音笔记的 Windows Phone 7 应用程序 (QuickNote)。我正在尝试添加一项功能,让用户可以通过电子邮件将他们的音频笔记作为附件发送出去。我使用 XNA 音频库在手机上播放语音笔记,并将原始音频(一个字节数组)保存在一个对象上以便播放。

我需要能够创建音频文件(.wav、.mp3 或其他文件)并将其发布到我创建的 App Engine java servlet,以便我可以将音频文件作为附件通过电子邮件发送。

非常感谢任何方向和/或代码示例。

【问题讨论】:

  • 你不是在这里问过同样的问题吗stackoverflow.com/questions/5768385/…
  • 不。在那里我问如何将原始音频数据获取到应用程序引擎并从中创建一个文件。现在我在问如何发送文件。不过感谢您的关心。

标签: google-app-engine windows-phone-7 audio attachment wav


【解决方案1】:

我没有 java 部分,但我有客户端部分 - 来自我在 http://chriskoenig.net/2011/08/19/upload-files-from-windows-phone/ 的帖子:

public partial class MainPage : PhoneApplicationPage
{
    // Constructor
    public MainPage()
    {
        InitializeComponent();
    }

    private void SelectButton_Click(object sender, RoutedEventArgs e)
    {
        PhotoChooserTask task = new PhotoChooserTask();
        task.Completed += task_Completed;
        task.Show();
    }

    private void task_Completed(object sender, PhotoResult e)
    {
        if (e.TaskResult != TaskResult.OK)
            return;

        const int BLOCK_SIZE = 4096;

        Uri uri = new Uri("http://localhost:4223/File/Upload", UriKind.Absolute);

        WebClient wc = new WebClient();
        wc.AllowReadStreamBuffering = true;
        wc.AllowWriteStreamBuffering = true;

        // what to do when write stream is open
        wc.OpenWriteCompleted += (s, args) =>
        {
            using (BinaryReader br = new BinaryReader(e.ChosenPhoto))
            {
                using (BinaryWriter bw = new BinaryWriter(args.Result))
                {
                    long bCount = 0;
                    long fileSize = e.ChosenPhoto.Length;
                    byte[] bytes = new byte[BLOCK_SIZE];
                    do
                    {
                        bytes = br.ReadBytes(BLOCK_SIZE);
                        bCount += bytes.Length;
                        bw.Write(bytes);
                    } while (bCount < fileSize);
                }
            }
        };

        // what to do when writing is complete
        wc.WriteStreamClosed += (s, args) =>
        {
            MessageBox.Show("Send Complete");
        };

        // Write to the WebClient
        wc.OpenWriteAsync(uri, "POST");
    }
}

基本上,您只需对某个 URL 运行 HTTP POST。在我博客的示例中,我发布到 ASP.NET MVC 控制器操作,它只接收传入的输入流并将其写入磁盘。

希望这会有所帮助。如果您在 java 方面遇到问题,请告诉我,我会看看我是否也不能为此制作一个样本。

/克里斯

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-01-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多