Edited at

Swiftで動画ダウンロードして、シェアする方法

More than 1 year has passed since last update.


概要

サーバにおいたファイルをダウンロードして、

シェアさせる方法


環境

iOS10.3.2

iPodTouch

Xcode8.3.3


コード


ViewController


//
// ViewController.swift
// uiactivitytest
//
// Created by KatsuyaSakuma on 2017/08/14.
// Copyright © 2017年 Sakuma. All rights reserved.
//

import UIKit

class ViewController: UIViewController {

override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view, typically from a nib.
}

override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.

}

//ダウンロードボタンを押したときの処理
@IBAction func touchedStartDownloadButton(){
//テキトーに動画ダウンロード
let url = URL(string: "https://exsample.com/ex.MOV")

let request = URLRequest(url: url!)

let task = URLSession.shared.dataTask(with: request) { (data, response, error) in

if(data == nil){
print("ダウンロード失敗")
return
}

if data!.count == 0 {
print("ダウンロード失敗?")

} else {
print("ダウンロード成功時")

//ドキュメントフォルダのパス
let path = NSSearchPathForDirectoriesInDomains(
.documentDirectory,
.userDomainMask, true).last!

//ファイルのパス
let _path = path + "/make2017.MOV"

//アプリ内に保存
try? data?.write(to: URL(fileURLWithPath: _path))
print("ダウンロード終了")
}
}
task.resume()

}

//シェアボタンが押されたら
@IBAction func touchedShareButton(){

let path = NSSearchPathForDirectoriesInDomains(
.documentDirectory,
.userDomainMask, true).last!

let moviepath = path + "/make2017.MOV"//保存したファイル名、パスを指定してください。

let text = "sample"
let url = URL(fileURLWithPath: moviepath)//ファイルのパス作成

//ファイルのパスを渡す
//Data型でわたしてもできなかった。
let items = [text,url] as [Any]//動画のパスを渡す

// UIActivityViewControllerインスタンス化
let activityVc = UIActivityViewController(activityItems: items, applicationActivities: nil)

// UIAcitivityViewController表示
self.present(activityVc, animated: true, completion: nil)

}

}



結果

できた。

UIActivityViewControllerに、動画ファイルをDataクラスに変更して、渡してみたが、うまくうごかなかった。Dataクラスにしてシェアすると意図しないファイル名になり、うまく拡張子がおかしくなったりした。そのかわり、ファイルのパスを渡すことで、うまくシェアされることが確認できた。


参考文献

https://teratail.com/questions/26203