Swift3
にAlamofire4
を使用しようとしています。私はダウンロードする必要があります。 mp3
ファイルを開き、Documents
ディレクトリに保存します。現在のコードはそうのようなものです:Alamofire 4でファイルをダウンロードしてDocumentsディレクトリに保存するにはどうすればよいですか?
func downloadAudioFromURL(url: String, completion: ((_ status: ResponseStatus, _ audioLocalURL: URL?) -> Void)?) {
let fileManager = FileManager.default
let directoryURL = fileManager.urls(for: .documentDirectory, in: .userDomainMask)[0]
let audioFullURL = String.ensureFullURLPath(url)
alamoManager.download(audioFullURL)
.validate { request, response, temporaryURL, destinationURL in
var pathComponent = response.suggestedFilename!
if pathComponent == "m4a.mp4" {
// Due to the old Android audio files without a filename
// Assign a unique name so audio files don't overwrite each other
pathComponent = "\(NSUUID().uuidString).mp4"
}
let localURL = directoryURL.appendingPathComponent(pathComponent)
if response.statusCode == 200 {
completion?(.success, localURL)
} else {
completion?(.failure, nil)
}
return .success
}
.responseJSON { response in
debugPrint(response)
print(response.temporaryURL)
print(response.destinationURL)
}
}
私は実際に保存した後localURL
からファイルにアクセスすることはできませんが。私はまた、localURL
が、私がダウンロードしようとしているファイル(また、上書きされているかもしれません)と全く同じであることに気がつきました。例:file:///Users/testuser/Library/Developer/CoreSimulator/Devices/D4254AEA-76DD-4F01-80AF-F1AF3BE8A204/data/Containers/Data/Application/29755154-DD21-4D4C-B340-6628607DC053/Documents/file1.mp3
私はここで間違っていますか?すべてのポインタは本当にありがとう!ありがとう!
はこのように私のコードを編集:
func downloadAudioFromURL(url: String, completion: ((_ status: ResponseStatus, _ audioLocalURL: URL?) -> Void)?) {
let destination: DownloadRequest.DownloadFileDestination = { _, _ in
var documentsURL = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask)[0]
documentsURL.appendPathComponent("Audiofile.mp3")
return (documentsURL, [.removePreviousFile])
}
Alamofire.download(url, to: destination).response { response in
if let localURL = response.destinationURL {
completion?(.success, localURL)
} else {
completion?(.failure, nil)
}
}
}
がどのように私もm4a.mp4をチェックするのでしょうか?
戻り値行には、「タイプ()の戻り式をタイプURLに変換できません」というエラーがあります。また、ダウンロードする前にパスコンポーネントを設定していますが、実際には推奨されるパスコンポーネントを使用したいと考えています。 – Kex
@Kexこの修正のための私の答えを見てください。タイプ()の戻り式をタイプURLに変換できません。 –
@Kex名前を知らないと、後でそのファイルにどのようにアクセスしますか?ファイルが1つしかない場合でも、自分で名前を入力することを強くお勧めします。私が提供した答えはAlamofireの推薦された方法です。私はそれを使用しようとしたときとは違った使い方をしようとしているのではない。 – ezcoding