- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我想添加一个进度条以准确了解我的视频上传的百分比,但无法调用 didCompleteWithError、didReceive 响应、didSendBodyData bytesSent:Int64、totalBytesSent:Int64、totalB 等...
我加好了delegate,但是没能抓到问题。
@objcMembers open class DAL : NSObject
{
var response: URLResponse?
var session: URLSession?
var uploadTask: URLSessionUploadTask?
let opQueue = OperationQueue()
static let sharedInstance = DAL()
fileprivate let showLogs = true
var WSURL:String = SERVER_PROTOCOL + DOMAIN_NAME_ADDRESS //"http://localhost:3000"
var eventKey:String = EVENT_TO_USE
}
在另一个类中:
extension DAL: URLSessionDelegate,URLSessionDataDelegate, URLSessionTaskDelegate
{
func uploadVideo(_ videoPath: String, fileName: String, eventId: Int, contactId: Int, type: Int, callback: @escaping (_ data:Data?, _ resp:HTTPURLResponse?, _ error:NSError?) -> Void)
{
// let filePath = video
// let videoFileURL = NSURL(fileURLWithPath: videoPath)
var video_data: NSData?
do {
video_data = try NSData(contentsOfFile: (videoPath), options: NSData.ReadingOptions.alwaysMapped)
} catch _ {
video_data = nil
return
}
let WSURL:String = "https://" + "ren.newp.fr/node"
let requestURLString = "\(WSURL)/regtions/lead/photo//"
let url = URL(string: requestURLString)
#if DEBUG
print(requestURLString)
#endif
let request = NSMutableURLRequest(url: url!)
request.httpMethod = "POST"
let boundary = generateBoundaryString()
//define the multipart request type
request.setValue("multipart/form-data; boundary=\(boundary)", forHTTPHeaderField: "Content-Type")
let body = NSMutableData()
let mimetype = "video/mp4"
//define the data post parameter
body.append("--\(boundary)\r\n".data(using: String.Encoding.utf8)!)
body.append("Content-Disposition:form-data; name=\"eventId\"\r\n\r\n".data(using: String.Encoding.utf8)!)
body.append("\(eventId)\r\n".data(using: String.Encoding.utf8)!)
body.append("--\(boundary)\r\n".data(using: String.Encoding.utf8)!)
body.append("Content-Disposition:form-data; name=\"contactId\"\r\n\r\n".data(using: String.Encoding.utf8)!)
body.append("\(contactId)\r\n".data(using: String.Encoding.utf8)!)
body.append("--\(boundary)\r\n".data(using: String.Encoding.utf8)!)
body.append("Content-Disposition:form-data; name=\"type\"\r\n\r\n".data(using: String.Encoding.utf8)!)
body.append("\(type)\r\n".data(using: String.Encoding.utf8)!)
body.append("--\(boundary)\r\n".data(using: String.Encoding.utf8)!)
body.append("Content-Disposition:form-data; name=\"file\"; filename=\"\(fileName)\"\r\n".data(using: String.Encoding.utf8)!)
body.append("Content-Type: \(mimetype)\r\n\r\n".data(using: String.Encoding.utf8)!)
body.append(video_data! as Data)
body.append("\r\n".data(using: String.Encoding.utf8)!)
body.append("--\(boundary)--\r\n".data(using: String.Encoding.utf8)!)
request.httpBody = body as Data
request.setValue("Keep-Alive", forHTTPHeaderField: "Connection")
let config = URLSessionConfiguration.default
self.session = URLSession(configuration: config, delegate: self, delegateQueue: self.opQueue)
let fileUrl = URL(string:"\(videoPath)/\(fileName)")
if let task = session?.uploadTask(with: request as URLRequest, from: video_data! as Data){
task.resume()}
}
private func urlSession(_ session: URLSession, task: URLSessionTask, didCompleteWithError error: Error?) {
// the task finished
if let err = error {
print("Error: \(err.localizedDescription)")
} else {
print("The upload was successful.")
self.session?.finishTasksAndInvalidate()
} // end if
} // end func
private func urlSession(_ session: URLSession, dataTask: URLSessionDataTask, didReceive response: URLResponse, completionHandler: @escaping (URLSession.ResponseDisposition) -> Void) {
print("did receive response")
self.response = response
print(self.response!)
completionHandler(URLSession.ResponseDisposition.allow)
} // end func
private func urlSession(_ session: URLSession, task: URLSessionTask, didSendBodyData bytesSent: Int64, totalBytesSent: Int64, totalBytesExpectedToSend: Int64) {
let progress = Float(totalBytesSent) / Float(totalBytesExpectedToSend)
print(progress)
} // end func
public func urlSession(_ session: URLSession, didReceive challenge: URLAuthenticationChallenge, completionHandler: @escaping (URLSession.AuthChallengeDisposition, URLCredential?) -> Void) {
completionHandler(Foundation.URLSession.AuthChallengeDisposition.useCredential, URLCredential(trust: challenge.protectionSpace.serverTrust!))
}
func generateBoundaryString() -> String
{
return "Boundary-\(UUID().uuidString)"
}
}
}
提前致谢
最佳答案
从您的类中删除开放参数: https://stackoverflow.com/a/38950955
简而言之:(来自其他帖子)
An open class is accessible and subclassable outside of the defining module. An open class member is accessible and overridable outside of the defining module.
A public class is accessible but not subclassable outside of the defining module. A public class member is accessible but not overridable outside of the defining module.
关于iOS:didCompleteWithError、didReceive 响应未通过 URLSession.uploadTask 触发,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53710141/
我需要将 mp4 视频文件从 iPhone/iPad 上传到服务器,也在后台,所以我读到可以使用 URLSession.uploadTask(with: URLRequest, fromFile: U
我完全受困于 URLSession 和 uploadTask。实际上我只是想将一个 json 上传到 Web 服务器,并且在上传过程中应该显示一个简单的进度条。我实现了apple给出的方法:https
我正在使用这段代码。错误信息如下:错误:没有为类型“UploadTask”定义 getter“onComplete”。 (undefined_getter 在 [chatneu] lib/Screen
我要崩溃了 它说 *** 由于未捕获的异常“NSGenericException”而终止应用程序,原因:“后台 session 不支持完成处理程序 block 。改用委托(delegate)人。 va
我(几乎)成功地实现了 URLSessionDelegate、URLSessionTaskDelegate 和 URLSessionDataDelegate,这样我就可以在后台上传我的对象了。但是我不
这个问题已经有答案了: How do i get download URL once upload is done on firebase storage (2 个回答) 已关闭 4 年前。 我目前正
我想使用 URLSession 类的 uploadTask 方法将图像发送到服务器,我有以下上传图像的函数,但我无法读取 php 文件中的任何内容。 @IBAction func uploadImag
我正在尝试获取 Firebase 上传的进度,但我试图用来监视状态的函数显然是在错误的对象类型上调用的: Uncaught TypeError: uploadTask.on is not a func
我正在使用 Angular2 和 Firbase 存储。我试图获取“uploadProgress”值来更新(在 HTML 文件中指定),但不知何故,uploadTask.on 函数中的“uploadP
这是我的两个例子: let config = NSURLSessionConfiguration.defaultSessionConfiguration() config.HTTPAd
我正在使用一个 API,该 API 接受使用多部分表单数据上传的视频。我想使用 NSURLSession.uploadTask (加上它的委托(delegate))来处理上传。 我的问题是我需要更改本
我正在使用 firebase 并注意到大多数方法都返回 promise ,但在文档中这个不是。是否可以将其更改为 promise ? uploadTask.on( 'state_changed
我正在尝试解决如何使用 swift 将一组参数和图像文件上传到我的 API。 我的代码大致在这一点上: //parameters let actualParameters = ["email"
我想添加一个进度条以准确了解我的视频上传的百分比,但无法调用 didCompleteWithError、didReceive 响应、didSendBodyData bytesSent:Int64、to
我正在开发一个使用 NSURLSession 上传多个文件的应用程序,现在我的文件已成功上传。但现在我想要实现的是暂停、恢复和取消上传,就像我们在下载任务中所做的那样。可能吗。?任何帮助,将不胜感激。
我试图上传到存储的图像是成功的,但是当我想使用上传的图像将 URL 存储到数据库中时,由于某种原因它返回 null。 Future _uploadPic(String docRef, File fil
我无法从暂停状态恢复 UploadTask。如果我在不尝试暂停上传的情况下让它完成,我就能够成功上传视频。根据Firebase Storage Android Documentation您可以使用 r
这个问题已经有答案了: How to get the download url from Firebase Storage? (1 个回答) 已关闭 3 年前。 如何获取下载URI? String d
当应用程序处于后台时,我在使用 NSURLSession UploadTask 上传视频文件时遇到 CFNetwork SSL 握手错误。当应用程序处于前台时,上传视频没有问题。仅当应用程序处于后台时
我想使用特定的 URL 端点将图像文件上传到后端服务器。我可以使用 Alamofire 的上传请求作为 multipartFormData 轻松做到这一点。不过我想摆脱 Alamofire 以尽量减少
我是一名优秀的程序员,十分优秀!