我正在实例化一个NSURLSession像这样做几个后台上传:
sessionConfiguration = [NSURLSessionConfiguration backgroundSessionConfigurationWithIdentifier:myIdentifier];
Run Code Online (Sandbox Code Playgroud)
在大多数情况下,一切似乎都运行正常,但我想知道是否需要在p.list中添加背景Fetch键,如果我所做的只是后台上传而不是下载?我无法找到文件说我应该或不应该.特别是在XCode 5 +上,我想知道如果在Capabilities> Background模式下,我应该启用或不启用后台获取,如果我正在做的是后台上传,请注意我在上传完成后会读取响应,这可能被视为"下载".
我正在尝试使用AFNetwork上传一个NSData图像,但出现了问题,我无法找到我的错误
这是我的代码:
NSData *imageData = UIImageJPEGRepresentation([UIImage imageNamed:@"test.jpg"], 0.1);
NSMutableDictionary *postParams = [NSMutableDictionary dictionaryWithObjectsAndKeys:
@"this is only a test post for \"app\".", @"app",
@"this POST for \"test\". ", @"test", nil];
NSMutableURLRequest *request = [[AFHTTPRequestSerializer serializer] multipartFormRequestWithMethod:@"POST" URLString:@"http://url/upload.php" parameters:postParm constructingBodyWithBlock:^(id<AFMultipartFormData> formData) {
[formData appendPartWithFileData:imageData name:@"file" fileName:@"filename.jpg" mimeType:@"image/jpeg" ];
} error:nil];
AFURLSessionManager *manager = [[AFURLSessionManager alloc] initWithSessionConfiguration:[NSURLSessionConfiguration defaultSessionConfiguration]];
NSProgress *progress = nil;
NSURLSessionUploadTask *uploadTask = [manager uploadTaskWithStreamedRequest:request progress:&progress completionHandler:^(NSURLResponse *response, id responseObject, NSError *error) {
if (error) {
NSLog(@"Error: %@", error);
} else …Run Code Online (Sandbox Code Playgroud) nsdata afnetworking afnetworking-2 nsurlsession nsurlsessionuploadtask
我将多个任务按顺序添加到NSURLSession(后台模式)中。我保持HTTPMaximumConnectionsPerHost =1。但是,我看到上传是按照随机顺序进行的,即,在第一个项目可能是第5个项目被拾取之后,第3个项目等等,等等-上载没有按顺序进行我提供给NSURLSession。有没有一种方法可以完全按照上传的顺序订购上传内容?
我在iOS应用中使用了视频上传系统NSURLSessionUploadTask.视频文件保存为,NSURL所以我在上传方法中使用以下代码:
request.HTTPMethod = @"POST";
[request addValue:@"file" forHTTPHeaderField:@"fileName"];
// Create upload task
NSURLSessionUploadTask *task = [session uploadTaskWithRequest:request fromFile:filePath completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
if(!error) {
// handle success
} else {
// handle error
}
}];
// Run the task
[task resume];
Run Code Online (Sandbox Code Playgroud)
我有一个在nginx下运行的PHP服务器(使用Laravel)来处理这个上传.我已经使用Postman对其进行了测试,并且它接受了很好的上传(期待名为"file"的文件).
当我运行上面的objc代码时,服务器告诉我没有上传文件($_FILES数组为空).
我已尝试使用和不设置"fileName"标头,我尝试将"Content-Type"设置为"multipart/form-data",但这些都不起作用.
如何NSURLSessionUploadTask正确上传这些文件(从a NSURL)到服务器?
这篇文章似乎详细说明了一个类似的问题:NSURLSessionUploadTask没有将文件传递给php脚本
php file-upload objective-c nsurlsession nsurlsessionuploadtask
我需要将iPhone / iPad上的mp4视频文件上传到服务器(也在后台),所以我读到可以通过URLSession.uploadTask(with:URLRequest,fromFile:URL)方法来实现,但我不知道该怎么做我之前准备了请求,我需要创建一个multipart / form-data请求,因为我想附加其他字符串参数。
func requestBodyFor(video: URL) -> Data? {
let url = URL(string: "url_of_upload_handler.php")!
let parameters = ["type":"video", "user":"112"]
do {
let kBoundary = "Boundary-\(UUID().uuidString)"
let kStartTag = "--%@\r\n"
let kEndTag = "\r\n"
let kContent = "Content-Disposition: form-data; name=\"%@\"\r\n\r\n"
var body = Data()
let videoData = try Data(contentsOf: video)
// parameters
for (key,value) in parameters {
body.append(String(format: kStartTag, kBoundary).data(using: String.Encoding.utf8)!)
body.append(String(format: kContent, key).data(using: String.Encoding.utf8)!)
body.append(value.data(using: String.Encoding.utf8)!)
body.append(String(format: kEndTag).data(using: String.Encoding.utf8)!)
}
//Video data
body.append(String(format: kStartTag, boundary).data(using: String.Encoding.utf8)!) …Run Code Online (Sandbox Code Playgroud) nsurlsession ×4
ios ×3
iphone ×2
afnetworking ×1
file-upload ×1
nsdata ×1
objective-c ×1
php ×1
swift3 ×1
xcode ×1