3

次のようにiPhoneデバイスからビデオをアップロードしようとしています:

var uploadTask = self.session?.uploadTaskWithRequest(request, fromFile:NSURL(string: assetFilePath.path)!)

このコードはシミュレーターで動作し、再開できるセッション タスク オブジェクトを提供します。ただし、iPhone デバイスでは機能しません。

次のように失敗します。

2015-05-19 18:36:44.718 myApp[327:24703] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: 'Cannot read file at file:///var/mobile/Media/DCIM/100APPLE/IMG_0144.mp4'

ビデオ ファイルに読み取りアクセスがあるかどうかを確認しようとしましたが、iPhone では false が返されます。

fileManager.fileExistsAtPath(asset.path)  // returns false

誰かが以前にこれに遭遇したことがありますか、それともここで何か間違ったことをしていますか?

ファイルパスを取得するために使用しているコードは次のとおりです。

    let options = PHFetchOptions()
    options.sortDescriptors = [
        NSSortDescriptor(key: "creationDate", ascending: true)
    ]
    currentVideofetch = PHAsset.fetchAssetsWithMediaType(.Video, options: options)
    let asset = self.currentVideofetch.objectAtIndex(indexPath.row) as? PHAsset  
    var assetLength:NSNumber!
    var assetFilePath:NSString!

    if let checkdAsset = asset {
        PHImageManager.defaultManager().requestImageDataForAsset(checkdAsset,options: nil) {
            imageData,dataUTI,orientation,info in

            assetLength = imageData.length as NSNumber
            let assetFilePathUrl  = info["PHImageFileURLKey"] as? NSURL
            assetFilePath = assetFilePathUrl!.absoluteString! 
            println("Assets FilePath \(assetFilePath)") // returns file:///var/mobile/Media/DCIM/100APPLE/IMG_0144.mp4
        }
    }
4

1 に答える 1

1

いろいろいじった後。これは、iOS の従来のアクセス許可の問題です。残念ながら、これに対する明確な答えは得られませんでした。ファイルをアプリのローカル ディレクトリにコピーする必要がありました。その後、すべてが魅力のように機能します。ただし、大きなファイルの場合は、バックグラウンド タスクでファイル ロジックのコピーを送信します。

于 2015-05-26T07:35:55.200 に答える