原文來自本人QQ空間的轉載整理。未親自測試過,先行收藏以便日後查閱。
//要上傳的文件名,在這裏我使用當前日期做爲文件的名稱
NSString * fileName =[NSString stringWithFormat:@"%ld", (long)[NSDatenew].timeIntervalSince1970];
//要上傳的文件
NSData * data = [NSData dataWithContentsOfFile:[XXXXXXXX]];
//下面的dic就是一些其他的參數,沒有就不要了
NSDictionary *dic = @{@"jsessionid": [User shareUser].sessionID,@"to":[UsershareUser].userID,@"fromUserId":self.toUserID,@"second":@((int)recorder.currentTime)};
// 接口的 AFHTTPSession 不能提供一種方法來設置進度塊。相反,必須進行以下操作:
// 1. 創建一個 `AFHTTPRequestSerializer`,利用此對象可以創建一個request請求.
AFHTTPRequestSerializer *serializer = [AFHTTPRequestSerializer serializer];
// 2. 獲取一個`NSMutableURLRequest`對象.
NSMutableURLRequest *request =
[serializer multipartFormRequestWithMethod:@"POST"//請求方法爲post
URLString:@"http://xxx.xxx.xxx.xx"//上傳文件URL
parameters:dic//上傳的其他參數
constructingBodyWithBlock:^(id<AFMultipartFormData> formData)//設置請求體
{
[formData appendPartWithFileData:data//音樂媒體文件的data對象
name:@"multipartFile"//與數據關聯的參數名稱,不能爲nil
fileName:fileName//上傳的文件名,不能爲nil
mimeType:@"audio/mp4"];//MIME類型(例如:圖片爲image/jpeg.) 可以參照 http://www.iana.org/assignments/media-types/. ,不能爲nil
} error:&playerError];//playerError爲錯誤對象
// 3. 創建並使用 `AFHTTPRequestOperationManager`,然後創建一個異步請求操作對象`AFHTTPRequestOperation`,這個對象執行時會發送剛剛創建的`NSMutableURLRequest`請求.
AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager];
AFHTTPRequestOperation *operation =
[manager HTTPRequestOperationWithRequest:request
success:^(AFHTTPRequestOperation *operation, id responseObject) {
NSLog(@"Success %@", responseObject);//上傳成功後的語句塊
} failure:^(AFHTTPRequestOperation *operation, NSError *error) {
NSLog(@"Failure %@", error.description);//上傳失敗的語句塊
}];
// 4. 設置上傳進度塊.
[operation setUploadProgressBlock:^(NSUInteger __unused bytesWritten,
long long totalBytesWritten,//已上傳的字節數
long long totalBytesExpectedToWrite)//總字節數
{
//每次上傳一部分數據,都會調用此塊輸出進度,可以在此方法中設置你的上傳進度條頁面
NSLog(@"Wrote %lld/%lld", totalBytesWritten, totalBytesExpectedToWrite);
}];
//5. 開始上傳任務
[operation start];