Ios 正在使用ASIHTTPRequest将.caf发送到服务器

Ios 正在使用ASIHTTPRequest将.caf发送到服务器,ios,objective-c,core-audio,asihttprequest,Ios,Objective C,Core Audio,Asihttprequest,我正在使用Avassetrader创建一个.caf文件,可以在我的计算机上本地播放。但是,当我尝试将.caf上载到服务器时,无法再读取上载的文件。这是我的密码: NSLog(@"Posting to server"); NSURL *serverURL = [NSURL URLWithString:serverString]; ASIFormDataRequest *request = [ASIFormDataRequest requestWithURL:serverURL]; [request

我正在使用Avassetrader创建一个.caf文件,可以在我的计算机上本地播放。但是,当我尝试将.caf上载到服务器时,无法再读取上载的文件。这是我的密码:

NSLog(@"Posting to server");
NSURL *serverURL = [NSURL URLWithString:serverString];
ASIFormDataRequest *request = [ASIFormDataRequest requestWithURL:serverURL];
[request setRequestMethod:@"POST"];
[request setData:songData
    withFileName:@"exported.caf"
  andContentType:@"audio/x-caf"
          forKey:@"musicfile"];
[request setDelegate:self];
[request startAsynchronous];
有趣的是,当我执行以下操作时,生成的文件在我的计算机上工作:

NSString *applicationDocumentsDir = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) objectAtIndex:0];
NSString *storePath = [applicationDocumentsDir stringByAppendingPathComponent:@"test.caf"];
[songData writeToFile:storePath atomically:NO];

我是否必须在musicData中附加某种类型的标题才能正确格式化.caf?

以下是一些故障排除说明,以确定问题:

  • 确保您在服务器上播放歌曲时使用的音频读取器应用程序与您在本地播放歌曲时使用的音频读取器应用程序完全相同(即消除服务器音频应用程序具有读取
    .caf
    文件的适当解码器的可能性)。您可以通过尝试播放原创歌曲轻松解决此问题(即一个不是您自己创建的,经证明有效的)
    .caf
    文件在远程服务器上

  • 当你遇到一个无法确定原因的问题时,请后退一步,使用第一原则。在这种情况下,请下载一个十六进制编辑器,如,并将本地获得的可读取文件与服务器上的文件进行比较。如果你发现值有任何差异,这意味着值在传输过程中出错由于整个big-endian/small-endian网络传输(您可以很好地讨论big/small-endian的含义,您可以使用诸如etc之类的函数来解决此问题(用作示例..它可能不是您最终必须使用的函数)

  • 您正在使用的API..是围绕CFNetwork API的包装器。它声明的目的是让您的生活更轻松,但在这种情况下,如果隐藏了太多内容(即您无法轻松调试问题),则该目的将不再实现。如果是这样,我建议您跳到更深的一层,直接使用。(这并不难,而且调试起来肯定更容易)


  • 这听起来像是一个严重的问题。上传的文件实际上是在服务器上保存的吗?而且,我不会把SturpPATH发送到服务器,而是让服务器决定在哪里存储。否则有人可以使用HTTP请求改写系统文件。BTW,ASIHTTPRequest不再被支持/开发。考虑替代,如AfNETWEB。根据hex fiend,我的程序似乎在将文件名附加到.caf文件的开头。当我删除前22个字节时,它可以工作,但我想知道是否有更好的方法来保存文件,而不是这样做?很明显,您不希望错误地将文件名附加到数据后再取出。这是误导g和低效。我怀疑这与此方法有关
    [请求设置数据:songData,文件名:@“exported.caf”和内容类型:@“audio/x-caf”forKey:@“musicfile”]
    但那只是一个猜测..仔细研究一下参数等,我相信你会找到答案的。不管怎样,你都能找到答案!我能得到正确的答案吗?:D