快速发布视频数据

问题描述 投票:0回答:1

我有一个可以录制视频并将其保存到照片的应用程序。我正在尝试检索保存的视频,并使用API​​将其发布到服务器。这是我的相同代码:

var request = URLRequest(url: URL(string: "SERVER_URL")!)
request.httpMethod = "POST"
request.setValue("multipart/form-data;", forHTTPHeaderField: "Content-Type")
var movieData: Data?
var JSONData: [String: Data]
do {
     movieData = try Data(contentsOf: url, options: Data.ReadingOptions.alwaysMapped)
     JSONData = ["live_video_file":movieData!]
} catch _ {
     movieData = nil
     return
}
var body = Data()
let datadata = try? JSONSerialization.data(withJSONObject: JSONData)
body.append(datadata!)
request.httpBody = body
let task = URLSession.shared.dataTask(with: request) { (data: Data?, response: URLResponse?, error: Error?) in
     if let `error` = error {
          print(error)
          return
     }
     if let `data` = data {
          print(String(data: data, encoding: String.Encoding.utf8)!)
     }
}
task.resume()

发布数据时收到的错误是:

2020-06-13 00:40:01.831576+0530 FaceVision[3778:1193943] [xpc.exceptions] <NSXPCConnection: 0x2820f1710> connection to service on pid 260 named com.apple.photos.service: Exception caught during invocation of reply block to message 'applyChangesRequest:reply:'.

Ignored Exception: Invalid type in JSON write (Foundation.__NSSwiftData)
(
    0   CoreFoundation                      0x0000000195e7c314 AF42303F-57B6-3C11-8F18-8E80ABF7D886 + 1254164
    1   libobjc.A.dylib                     0x0000000195b90c1c objc_exception_throw + 60
    2   Foundation                          0x00000001962f8e90 19FAB59F-6527-3245-85BB-905FD4255CDE + 1859216
    3   Foundation                          0x00000001962fb8ac 19FAB59F-6527-3245-85BB-905FD4255CDE + 1869996
    4   libswiftCore.dylib                  0x00000001a3946ec4 DFF781B2-A7E7-3050-AC01-8D682E7E2D75 + 2911940
    5   libswiftCore.dylib                  0x00000001a370b794 DFF781B2-A7E7-3050-AC01-8D682E7E2D75 + 571284
    6   Foundation                          0x00000001962fad94 19FAB59F-6527-3245-85BB-905FD4255CDE + 1867156
    7   Foundation                          0x00000001961a3be0 19FAB59F-6527-3245-85BB-905FD4255CDE + 461792
    8   Foundation                          0x00000001961a384c 19FAB59F-6527-3245-85BB-905FD4255CDE + 460876
    9   FaceVision                          0x000000010263deb0 $s10FaceVision14ViewControllerC9saveVideo3url16returnCompletiony10Foundation3URLV_ySSSgctFZySo21PHAuthorizationStatusVcfU_ySb_s5Error_pSgtcfU0_ + 2032
    10  FaceVision                          0x000000010263f194 $sSbs5Error_pSgIegyg_SbSo7NSErrorCSgIeyByy_TR + 140
    11  Photos                              0x00000001a184bbbc 2459BA77-F19F-31BA-A85E-3713FFAEEAE3 + 883644
    12  CoreFoundation                      0x0000000195e82f14 AF42303F-57B6-3C11-8F18-8E80ABF7D886 + 1281812
    13  CoreFoundation                      0x0000000195d4c098 AF42303F-57B6-3C11-8F18-8E80ABF7D886 + 8344
    14  Foundation                          0x000000019637ed20 19FAB59F-6527-3245-85BB-905FD4255CDE + 2407712
    15  Foundation                          0x0000000196147600 19FAB59F-6527-3245-85BB-905FD4255CDE + 83456
    16  Foundation                          0x0000000196380058 19FAB59F-6527-3245-85BB-905FD4255CDE + 2412632
    17  libxpc.dylib                        0x0000000195a7e4f4 33B9156A-9AE1-3385-BD08-38552A3F3B7F + 103668
    18  libxpc.dylib                        0x0000000195a724d4 33B9156A-9AE1-3385-BD08-38552A3F3B7F + 54484
    19  libdispatch.dylib                   0x00000001029c7214 _dispatch_client_callout3 + 20
    20  libdispatch.dylib                   0x00000001029e3b54 _dispatch_mach_msg_async_reply_invoke + 392
    21  libdispatch.dylib                   0x00000001029ce798 _dispatch_lane_serial_drain + 260
    22  libdispatch.dylib                   0x00000001029cf5b4 _dispatch_lane_invoke + 492
    23  libdispatch.dylib                   0x00000001029db0f0 _dispatch_workloop_worker_thread + 1344
    24  libsystem_pthread.dylib             0x0000000195b83714 _pthread_wqthread + 276
    25  libsystem_pthread.dylib             0x0000000195b899c8 start_wqthread + 8
)

为什么会收到此错误,我该怎么做才能防止它发生?

ios swift api swift4 swift5
1个回答
0
投票

我假设您在呼叫JSONSerialization.data(withJSONObject:)时崩溃了。如果您阅读有关JSONSerialization的文档,他们会说:

可能转换为JSON的Foundation对象必须具有 以下属性:

顶级对象是NSArray或NSDictionary。

[所有对象都是NSString,NSNumber,NSArray, NSDictionary或NSNull。

所有字典键都是NSString的实例。

数字不是NaN或无穷大。

其他规则可能适用。调用isValidJSONObject(_ :)或尝试 转换是确定给定对象是否可以的明确方法 转换为JSON数据。

关键是这样:“所有对象都是NSString,NSNumber,NSArray,NSDictionary或NSNull的实例”。您正在尝试对包含Data对象的字典进行编码,但是Data不是用于JSON编码的有效数据类型之一。

为什么您认为需要对视频文件进行JSON编码?似乎很奇怪。

如果确实需要JSON编码,则需要将视频数据转换为Base64编码的字符串,或者以某种方式将其转换为上述类型之一。

服务器需要什么格式?您是否具有服务器API规范的链接?

© www.soinside.com 2019 - 2024. All rights reserved.