IOS 利用AFN上傳圖片,支援多張、單張上傳
前言:本文主要利用AFN來進行圖片上傳,支援單張、多張;
個人覺得導致上傳失敗的原因,大部分情況下都是由於
[formData appendPartWithFileData:imageData name:[NSString stringWithFormat:@"upload%d",i+1] fileName:fileName mimeType:@"image/jpeg"];
這個方法的引數沒有與後臺一致導致的。
其中需要跟後臺約定的有:
1、name:後臺可以通過檔名來獲取到相應的圖片流;
2、mimeType:更多的是讓後臺知道你上傳的型別;
說白了就是報文頭能夠讓後臺識別
NSMutableDictionary *mutableHeaders = [NSMutableDictionary dictionary]; [mutableHeaders setValue:[NSString stringWithFormat:@"form-data; name=\"%@\"; filename=\"%@\"", name, fileName] forKey:@"Content-Disposition"]; [mutableHeaders setValue:mimeType forKey:@"Content-Type"];
具體程式碼如下
#import <Foundation/Foundation.h> typedef void(^HttpUploadSuccessBlock)(id Json); typedef void(^HttpUploadFailureBlock)(); @interface HttpTool : NSObject /** * 上傳圖片(單張) * * @param path 路徑 * @param image 圖片 * @param params 引數 * @param success 成功回撥 * @param failure 失敗回撥 */ + (void)uploadImageWithPath:(NSString *)path image:(UIImage *)image params:(NSDictionary *)params success:(HttpUploadSuccessBlock)success failure:(HttpUploadFailureBlock)failure; /** * 上傳圖片(多張) * * @param path 路徑 * @param photos 圖片陣列 * @param params 引數 * @param success 成功回撥 * @param failure 失敗回撥 */ + (void)uploadImageWithPath:(NSString *)path photos:(NSArray *)photos params:(NSDictionary *)params success:(HttpUploadSuccessBlock)success failure:(HttpUploadFailureBlock)failure; @end
#import "HttpTool.h"
#import "AFNetworking.h"
#import "SVProgressHUD.h"
static AFHTTPSessionManager *manager;
@implementation HttpTool
//為了防止記憶體洩露
+ (AFHTTPSessionManager *)sharedHttpSession
{
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
manager = [AFHTTPSessionManager manager];
manager.requestSerializer.timeoutInterval = 10;
manager.responseSerializer.acceptableContentTypes = [NSSet setWithObjects:@"application/json",@"text/json", @"text/plain", @"text/html", nil];
});
return manager;
}
#pragma mark 上傳單張圖片
+ (void)uploadImageWithPath:(NSString *)path image:(UIImage *)image params:(NSDictionary *)params success:(HttpUploadSuccessBlock)success failure:(HttpUploadFailureBlock)failure
{
NSArray *array = [NSArray arrayWithObject:image];
[self uploadImageWithPath:path photos:array params:params success:success failure:failure];
}
#pragma mark 上傳圖片
+ (void)uploadImageWithPath:(NSString *)path photos:(NSArray *)photos params:(NSDictionary *)params success:(HttpUploadSuccessBlock)success failure:(HttpUploadFailureBlock)failure
{
[SVProgressHUD showProgress:-1 status:@"正在上傳,請稍等."];
path = [path stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
AFHTTPSessionManager *manager = [HttpTool sharedHttpSession];
[manager POST:path parameters:params constructingBodyWithBlock:^(id<AFMultipartFormData> _Nonnull formData) {
for (int i = 0; i < photos.count; i ++) {
NSDateFormatter *formatter=[[NSDateFormatter alloc]init];
[email protected]"yyyyMMddHHmmss";
NSString *str=[formatter stringFromDate:[NSDate date]];
NSString *fileName=[NSString stringWithFormat:@"%@.jpg",str];
UIImage *image = photos[i];
NSData *imageData = UIImageJPEGRepresentation(image, 0.28);
[formData appendPartWithFileData:imageData name:[NSString stringWithFormat:@"upload%d",i+1] fileName:fileName mimeType:@"image/jpeg"];
}
} progress:^(NSProgress * _Nonnull uploadProgress) {
MyLog(@"uploadProgress is %lld,總位元組 is %lld",uploadProgress.completedUnitCount,uploadProgress.totalUnitCount);
} success:^(NSURLSessionDataTask * _Nonnull task, id _Nullable responseObject) {
NSString *resultCode = [NSString stringWithFormat:@"%@",[responseObject objectForKey:@"result_code"]];
NSString *resultInfo = [responseObject objectForKey:@"result_info"];
MyLog(@"resultInfo is %@",resultInfo);
if ([resultCode isEqualToString:@"1"]) {
[SVProgressHUD showSuccessWithStatus:@"上傳成功"];
if (success == nil) return ;
success(responseObject);
}else {
[SVProgressHUD showErrorWithStatus:resultInfo];
if (failure == nil) return ;
failure();
}
} failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
[SVProgressHUD showErrorWithStatus:@"上傳失敗"];
if (failure == nil) return ;
failure();
}];
}
相關推薦
IOS 利用AFN上傳圖片,支援多張、單張上傳
前言:本文主要利用AFN來進行圖片上傳,支援單張、多張; 個人覺得導致上傳失敗的原因,大部分情況下都是由於 [formData appendPartWithFileData:imageData name:[NSString stringWithFormat:@"upload
ajaxFileUpload.js 無重新整理上傳圖片,支援多個引數同時上傳,支援 ie6-ie10
ajaxFileUpload 無重新整理上傳的原理: 在頁面動態建立 form 表單和 ifram 貞,設定 form 表單提交的目標為 ifram 貞, 將檔案域和要 post 的引數動態寫入 form 表單中,然後提交 from 表單。 通過 window.attach
利用ajax上傳圖片,並使用CURL呼叫介面
這是我第一次使用ajax上傳檔案,並且不通過form表單進行上傳,之前使用ajax上傳檔案時是藉助一個叫form.js的檔案,可以直接使用$.ajaxSumbmit直接提交表單,但這次不同,就是使用ajax上傳,並且將圖片資訊放在ajax要上傳的資料data陣列或物件中,怎麼
iOS整合七牛雲(上傳圖片,視訊,音訊等檔案)
用的CocoaPods匯入SDK platform :ios,'9.0' target '專案名' do pod 'AFNetworking' pod 'Qiniu' end 匯入標頭檔案 #import<QiniuSDK.h> #i
asp.net上傳圖片,儲存檔名和路徑,並利用javascript顯示圖片預覽
<script type="text/javascript"> function show(id) { document.getElementById("Image1").src=id; } </script
使用springmvc 接收上傳圖片,在 手機 ios 上,有圖片上傳就不報錯, 沒有就報下面這個錯誤,然後在pc端跟安卓手機上就不會有這個錯誤,這是為什麼呢?
七月 18, 2018 4:04:22 下午 org.apache.catalina.core.StandardWrapperValve invoke 嚴重: Servlet.service() for servlet [springMVC] in context with
iOS原生api post上傳圖片,上傳視訊
我之前在做檔案上傳的時候,不想用第三方的,於是就寫了一個簡單的圖片上傳方法 ------------.h檔案裡面寫一個這樣方法------- /** * 非同步上傳檔案,視訊,圖片 * * @param name 名字 這個名字是和後臺
優化Recorder H5錄音:可邊錄邊轉碼上傳伺服器,支援微信提供Android IOS Hybrid App原始碼
目錄 一、Recorder H5錄音庫的特性 (1)瀏覽器支援 (2)功能支援 二、使用預覽截圖 (1)移動端H5 (2)IOS Hybrid App
使用 CKEditor 上傳圖片, 粘貼屏幕截圖
要求 license 回調 wan ade 做成 操作 rms 粘貼 之前寫過wangEditor,那真是好用,文檔也清晰,半天就搞定了,無奈沒有對應license,只好選擇別的。 外語一般,閱讀理解都靠蒙。CKEditor官方文檔看的我雲裏霧裏,國內的博客比較少,
百度WebUploader上傳圖片,圖片回顯編輯,查看
set 唯一性 original 無需 同名 sch nag fin enum 頁面前端使用的是bootstrap,java後端springMVC , 上傳用的WebUploader,先說說上傳圖片,回顯編輯圖片在下一篇 如果僅僅只需要上傳圖片,不需要回顯進行編輯圖片,使用
html 上傳圖片,本頁預覽
html 上傳圖片 本頁預覽 直接上代碼<!DOCTYPE html><html><head><meta charset="UTF-8"><title>圖片上傳預覽</title><script type="text/j
vue, vux調用微信點擊圖片,上傳圖片,刪除圖片,接口,其中選圖接口,蘋果手機顯示有問題,查看不到圖片,提交會提示fail not exist,解決如下
ssd fff sset ogre 默認 item config tom ima <template> <div v-cloak v-show="show"> <div v-show="mailbox">
C# 使用FileUpload控件上傳圖片,將文件轉換成二進制進行存儲與讀取
擴展 實現 bmi extension aaa 插入數據 問題 pup cat 狀況描述: 需要上傳文件,但是不想要保存到實體路徑下,便可以用該功能來實現。 效果圖: 點擊【Upload】按鈕,上傳文件到數據庫; 點擊【Preview】,預覽文件;
微信jssdk上傳圖片,一張一張的上傳 和 一次性傳好幾張
pla can 參數錯誤 其他 屬性 使用 down pop menu //html模板 <div class="zhaopin_3_2"> <div id="bbb"></div> &
小程序上傳圖片,排隊上傳
length 內容 ext 有效 ges mar 顯示 func 沒有 //沒有處理的wxml,但是有效果,可以簡單試驗一下 <view class=‘minbox1‘> <text class=‘red wzgs‘>*</text>
php 中使用cURL發送get/post請求,上傳圖片,批處理
cit gda 抓取 記錄 rem 學習 網頁 lose XML https://mp.weixin.qq.com/s/8luqMEd8xt8oJxFLLCU1XA 文章正文 cURL是利用url語法規定傳輸文件和數據的工具。php中有curl拓展,一般用來實現網絡抓取,模
微信小程式上傳圖片,視訊及預覽
wxml <!-- 圖片預覽 --> <view class='preview-warp' wx:if="{{urls}}"> <image src='{{urls}}' /> </view> <view class="prew_video"
安卓專案實戰之強大的網路請求框架okGo使用詳解(六):擴充套件專案okServer,更強大的下載上傳功能,支援斷點和多工管理
OkGo與OkDownload的區別就是,OkGo只是簡單的做一個下載功能,不具備斷點下載,暫停等操作,但是這在很多時候已經能滿足需要了。 而有些app需要有一個下載列表的功能,就像迅雷下載一樣,每個下載任務可以暫停,可以繼續,可以重新下載,可以有下載優先順序,這時候OkDownload就有
layer 彈框 cropper 裁剪上傳圖片,thinkphp 3 使用 CropAvatar.class.php
最近要做一個上傳裁剪圖片功能,但是網上收出來的東西,知識點都是對的。但是就是沒說清楚,也無法連續起來用。 經過自己整理出來的一套程式碼,親測可用! 不用多說,直接上菜。 PS:搜尋引擎收錄的還是很垃圾...... 呼叫頁面,簡單程式碼(可複用) <img src="{$info.co
elementui 上傳圖片到七牛雲上面去,可以多張上傳 【簡單/有效】
目的:elementui 上傳多張圖片到七牛雲上面去 第一步:效果說明 七牛雲顯示: 第二步:程式碼 2-1、這裡會用到兩個小東西,一個是 後臺獲取 token,一個是獲取一個隨機不重複字串(uuid用來做上傳檔案的名稱) token 獲取:https