像qik.com,ustream.com,我希望知道如何通過iPhone SDK 3.0在後臺上傳文件。請讓我知道。謝謝 !我們如何在iphone上做後臺文件上傳?
回答
你可以開始爲你的文件上傳一個新的線程,查找到NSThread類繼承人鏈接http://developer.apple.com/iphone/library/documentation/Cocoa/Reference/Foundation/Classes/NSThread_Class/Reference/Reference.html ......那說你也可以使用asynchronousRequest從NSURLConnection的該繼承人啓動一個線程爲大家做參考http://developer.apple.com/iphone/library/documentation/Cocoa/Reference/Foundation/Classes/NSURLConnection_Class/Reference/Reference.html
你可以這樣做(這基本上是從我的一個項目中刪除&粘貼)。幸得在發展論壇的一些帖子,但我不知道這是誰的了:
- (IBAction)startUpload:(id)sender {
NSString *filename = [NSString stringWithFormat:@"iphone-%d.png", [NSDate timeIntervalSinceReferenceDate]];
NSString *boundary = @"----BOUNDARY_IS_I";
NSURL *url = [NSURL URLWithString:@"http://yourgreatwebsite.com/upload"];
NSMutableURLRequest *req = [NSMutableURLRequest requestWithURL:url];
[req setHTTPMethod:@"POST"];
NSString *contentType = [NSString stringWithFormat:@"multipart/form-data; boundary=%@", boundary];
[req setValue:contentType forHTTPHeaderField:@"Content-type"];
NSData *imageData = UIImagePNGRepresentation([imageView image]);
// adding the body
NSMutableData *postBody = [NSMutableData data];
// first parameter an image
[postBody appendData:[[NSString stringWithFormat:@"\r\n--%@\r\n", boundary] dataUsingEncoding:NSUTF8StringEncoding]];
[postBody appendData:[[NSString stringWithFormat:@"Content-Disposition: form-data; name=\"filename\"; filename=\"%@\"\r\n", filename] dataUsingEncoding:NSUTF8StringEncoding]];
[postBody appendData:[@"Content-Type: image/png\r\n\r\n" dataUsingEncoding:NSUTF8StringEncoding]];
[postBody appendData:imageData];
// second parameter information
[postBody appendData:[[NSString stringWithFormat:@"\r\n--%@\r\n", boundary] dataUsingEncoding:NSUTF8StringEncoding]];
//[postBody appendData:[@"Content-Disposition: form-data; name=\"some_other_name\"\r\n\r\n" dataUsingEncoding:NSUTF8StringEncoding]];
//[postBody appendData:[@"some_other_value" dataUsingEncoding:NSUTF8StringEncoding]];
//[postBody appendData:[[NSString stringWithFormat:@"\r\n--%@--\r \n",boundary] dataUsingEncoding:NSUTF8StringEncoding]];
[req setHTTPBody:postBody];
//start the spinner and deactivate the buttons...
[self setButtonsEnabled:NO];
[[NSURLConnection alloc] initWithRequest:req delegate:self];
}
#pragma mark urlconnection delegate methods
- (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response
{
// this method is called when the server has determined that it
// has enough information to create the NSURLResponse
// it can be called multiple times, for example in the case of a
// redirect, so each time we reset the data.
// receivedData is declared as a method instance elsewhere
[receivedData setLength:0];
}
- (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data
{
// append the new data to the receivedData
// receivedData is declared as a method instance elsewhere
[receivedData appendData:data];
}
- (void)connection:(NSURLConnection *)connection
didFailWithError:(NSError *)error
{
// release the connection, and the data object
[connection release];
// inform the user
UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Upload Error" message:[NSString stringWithFormat:@"The upload failed with this error: %@", [error localizedDescription]] delegate:nil cancelButtonTitle:@"OK" otherButtonTitles:nil];
[alert show];
[alert release];
NSLog(@"Connection failed! Error - %@ %@",
[error localizedDescription],
[[error userInfo] objectForKey:NSErrorFailingURLStringKey]);
}
- (void)connectionDidFinishLoading:(NSURLConnection *)connection
{
// do something with the data
// receivedData is declared as a method instance elsewhere
#ifdef DEBUG
NSLog(@"upload succeeded!");
#endif
// release the connection, and the data object
[connection release];
NSString *response = [NSString stringWithCString:[receivedData bytes] length:[receivedData length]];
#ifdef DEBUG
NSLog(response);
#endif
}
如果你指的後臺上傳,而應用程序無法運行,你不能(OS沒有按不允許)。如果它是運行應用程序時的背景,這裏發佈的鏈接和示例代碼工作得很好。
「背景」中的含義並不清楚,但如果您只是想要異步上傳,則可以使用NSURLConnection,NSURLRequest,或者使用名爲ASIHTTPRequest的優秀庫。它效果很好,並提供了一種顯示下載和上傳進度的簡單方法。
+1,看起來像一個真棒框架! – 2009-09-11 21:05:54
請參閱this post一個(非常深思熟慮的)迴應。
雖然無法在應用程序未運行時在後臺上傳文件,但在應用程序運行時完全可以這樣做。這樣你不會影響你的前景線程,再加上你可能會增加這個來顯示進度等。
- 1. 通過iPhone上的ftp在後臺上傳文件
- 2. 在後臺上傳iPhone圖片
- 3. 在後臺上傳文件,服務?
- 4. 在後臺上傳csv文件
- 5. php文件在後臺上傳?
- 6. ASP.NET在後臺上傳文件(BITS/AJAX?)
- 7. Service + BroadcastReceiver:在後臺上傳文件?
- 8. 如何在iPhone應用程序正在做其他事情時在後臺上傳文件
- 9. iphone上的文件上傳
- 10. 如何在後臺在iOS上接收watchOS文件傳輸
- 11. iPhone文件上傳
- 12. 異步後臺多文件上傳?
- 13. 使用後臺作業上傳文件
- 14. 清除文件上傳後在valums上傳ajax文件上傳
- 15. 如何在後臺停止上傳?
- 16. 我可以在後臺運行Autoit腳本來上傳文件
- 17. 如何在上傳後清除文件?
- 18. 我們如何防止.exe類型文件在網站上傳?
- 19. 上傳完成後,我們可以獲取onedrive上傳的文件鏈接嗎?
- 20. 如何在PHP上傳後上傳文件的SHA
- 21. 繼續在後臺上傳
- 22. PHP ftp在後臺上傳
- 23. 如何在iphone上skyDrive上傳/下載文件夾sdk
- 24. 如何使用Sidekiq將文件上傳到後臺?
- 25. Rails:後臺文件上傳如何工作?
- 26. 從iPhone上傳pdf文件
- 27. 用PhoneGap + iPhone上傳文件
- 28. iPhone +文件上傳控制
- 29. iphone iCloud - 我們如何從我們的應用程序上傳圖片到iCloud。
- 30. iPhone上的文件上傳問題
嗨 像qik.com或ustream.com一樣,當他們從iPhone上傳內容到服務器時,它可以通過守護進程。因此,即使退出應用程序時,該任務仍在使用後臺守護進程。有什麼方法可以用同樣的方式實現守護進程?謝謝 !!! – dvch 2009-09-11 20:43:59
你確定嗎? – Daniel 2009-09-12 04:51:37