上面文档是在其他位置文件夹下操作的,本文是在/Library/WebServer/Documents文件夹下操作。
- 修改
httpd.conf
187行
LoadModule php7_module libexec/apache2/libphp7.so
231行
ServerName localhost:80
256行
DocumentRoot "/Library/WebServer/Documents"
<Directory "/Library/WebServer/Documents">
Options FollowSymLinks Multiviews
MultiviewsMatch Any
AllowOverride None
Require all granted
</Directory>
-
/Library/WebServer/Documents的目录结构
Documents
文件夹需要可读可写权限
修改权限
-
测试上传文件,
upload_file.php文件保存路径为upload文件夹,在/Library/WebServer/Documents下创建upload文件夹 -
demo
链接: https://pan.baidu.com/s/1XWchIIpfZ0THydhTol1Pzg
密码: 6t7u
vc.m
#import "AFNetworking.h"
#import "UploadImageObj.h"
#define UploadUrl @"http://127.0.0.1/uploadTest/upload_file.php"
@interface ViewController ()
@property (nonatomic, strong) UploadImageObj *uploadObj;
@end
@implementation ViewController
- (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event {
[self uploadAvatar1];
[self uploadAvatar2];
[self uploadAvatar3];
}
- (void)uploadAvatar1 {
UIImage *image = [UIImage imageNamed:@"123.png"];
NSData *imageData = UIImageJPEGRepresentation(image, .5);
NSString *path = [NSString stringWithFormat:@"%@%@", BASE_URL, @"gps-user/upload/fileUpload.do"];
NSDictionary *param = @{@"file":imageData,
@"fileName":@"头像1.jpg"};
NSDictionary *header = @{
@"Authorization":self.token
};
path = UploadUrl;
self.uploadObj = [UploadImageObj new];
[_uploadObj uploadParameter:param header:header toUrlString:path];
}
- (void)uploadAvatar2 {
NSArray *images = @[[UIImage imageNamed:@"123"], [UIImage imageNamed:@"WechatIMG227"]];
[self uploadImagesWithImages:images url:UploadUrl parameters:nil success:^(id responseObject) {
NSString *outstring = [[NSString alloc] initWithData:responseObject encoding:NSUTF8StringEncoding];
NSLog(@"2 上传成功 rsp:%@", outstring);
} failure:^(NSError *error) {
NSLog(@"2 上传失败%@",error);
}];
}
- (void)uploadAvatar3 {
NSString *path = [NSString stringWithFormat:@"%@%@", BASE_URL, @"gps-user/upload/fileUpload.do"];
NSDictionary *param = nil;
NSDictionary *header = @{
@"Authorization":self.token
};
path = UploadUrl;
AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];
manager.responseSerializer.acceptableContentTypes = [NSSet setWithObjects:@"application/json",
@"text/html",
@"image/jpeg",
@"image/png",
@"application/octet-stream",
@"text/json",
nil];
manager.requestSerializer= [AFHTTPRequestSerializer serializer];
manager.responseSerializer= [AFHTTPResponseSerializer serializer];
[manager POST:path parameters:param headers:header constructingBodyWithBlock:^(id<AFMultipartFormData> _Nonnull formData) {
UIImage *image = [UIImage imageNamed:@"123.png"];
NSData *data = UIImagePNGRepresentation(image);
//上传的参数(上传图片,以文件流的格式)
[formData appendPartWithFileData:data
name:@"file"
fileName:@"头像11.png"
mimeType:@"image/png"];
} progress:nil success:^(NSURLSessionDataTask * _Nonnull task, id _Nullable responseObject) {
NSString *outstring = [[NSString alloc] initWithData:responseObject encoding:NSUTF8StringEncoding];
NSLog(@"3 上传成功 rsp:%@", outstring);
} failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
NSLog(@"3 上传失败%@",error);
}];
}
- (void)uploadImagesWithImages:(NSArray<UIImage *> *)imageArray url:(NSString *)urlStr parameters:(NSDictionary *)parameters success:(void (^)(id responseObject))success failure:(void (^)(NSError *error))failure {
AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];
manager.responseSerializer = [AFHTTPResponseSerializer serializer];
manager.responseSerializer.acceptableContentTypes = [NSSet setWithObjects:@"application/json",
@"text/html",
@"image/jpeg",
@"image/png",
@"text/json",
nil];
[manager POST:urlStr parameters:parameters headers:nil constructingBodyWithBlock:^(id<AFMultipartFormData> _Nonnull formData) {
int imageCount = 0;
for (UIImage *image in imageArray) {
NSString *mineType = @"image/jpeg";
NSString *str =@"";
if (UIImagePNGRepresentation(image)) {
mineType = @"image/png";
str = @"png";
}else {
mineType = @"image/jpeg";
str = @"jpeg";
}
NSData *data = UIImageJPEGRepresentation(image, 0.30);
[formData appendPartWithFileData:data name:[NSString stringWithFormat:@"file"] fileName:[NSString stringWithFormat:@"icon%d.%@",imageCount,str] mimeType:mineType];
imageCount++;
}
} progress:nil success:^(NSURLSessionDataTask * _Nonnull task, id _Nullable responseObject) {
success(responseObject);
} failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
failure(error);
}];
}
UploadImageObj.h
@interface UploadImageObj : NSObject
/**
[self uploadParameter:@{@"file":imageData,
@"fileName":tmpImageName}
toUrlString:[NSString stringWithFormat:@"%@uploadPhoto", kAFAppNetworkAPIBaseURLString]]
*/
- (void)uploadParameter:(NSDictionary *)dict header:(NSDictionary *)header toUrlString:(NSString *)urlString;
@end
UploadImageObj.m
#import "UploadImageObj.h"
@implementation UploadImageObj
#define kBoundary @"------------0x0x0x0x0x0x0x0x"
#define IMAGE_CONTENT @"Content-Disposition: form-data; name=\"%@\"; filename=\"%@\"\r\nContent-Type: image/jpeg\r\n\r\n"
#define STRING_CONTENT @"Content-Disposition: form-data; name=\"%@\"\r\n\r\n"
#define MULTIPART @"multipart/form-data; boundary=------------0x0x0x0x0x0x0x0x"
#define DATA(X) [X dataUsingEncoding:NSUTF8StringEncoding]
/**
[self uploadParameter:@{@"file":imageData,
@"fileName":tmpImageName}
toUrlString:[NSString stringWithFormat:@"%@uploadPhoto", kAFAppNetworkAPIBaseURLString]]
*/
- (void)uploadParameter:(NSDictionary *)dict header:(NSDictionary *)header toUrlString:(NSString *)urlString {
NSData *postData = [self prepareDataForUpload:dict];
NSURL *url = [NSURL URLWithString:urlString];
NSMutableURLRequest *urlRequest = [NSMutableURLRequest requestWithURL:url];
[urlRequest setHTTPMethod: @"POST"];
[urlRequest setValue:MULTIPART forHTTPHeaderField: @"Content-Type"];
//[urlRequest setHTTPBody:postData];//在session传data就注释改行, session传request就设置body
[header enumerateKeysAndObjectsUsingBlock:^(id _Nonnull key, id _Nonnull obj, BOOL * _Nonnull stop) {
[urlRequest addValue:obj forHTTPHeaderField:key];
}];
NSURLSessionConfiguration *config = [NSURLSessionConfiguration defaultSessionConfiguration];
config.timeoutIntervalForRequest = 10;
NSURLSession *session = [NSURLSession sessionWithConfiguration:config];
[[session uploadTaskWithRequest:urlRequest fromData:postData completionHandler:^(NSData * _Nullable data, NSURLResponse * _Nullable response, NSError * _Nullable error) {
NSLog(@"1 %@-data:%@\n rsp:%@ err:%@", [NSThread currentThread], data, response, error.description);
NSString *outstring = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
NSLog(@"1 server return message:%@\n", outstring);
// 1server return message:{"SUCCESS":true,"MESSAGE":"上传成功","DATA":{"headimg":"http://192.168.1.254:80/pmb/upload/headimg/91_1446866226916.jpeg"}}
}] resume];
}
- (NSData *)prepareDataForUpload:(NSDictionary*)dict {
NSArray *keys = [dict allKeys];
NSMutableData *result = [NSMutableData data];
for (int i = 0; i < [keys count]; i++) {
id value = dict[keys[i]];
[result appendData:[[NSString stringWithFormat:@"--%@\r\n", kBoundary] dataUsingEncoding:NSUTF8StringEncoding]];
if ([value isKindOfClass:[NSData class]]) {
// handle image data
NSString *formstring = [NSString stringWithFormat:IMAGE_CONTENT, keys[i], dict[@"fileName"]];
[result appendData: DATA(formstring)];
[result appendData:value];
} else {
// all non-image fields assumed to be strings
NSString *formstring = [NSString stringWithFormat:STRING_CONTENT, keys[i]];
[result appendData: DATA(formstring)];
[result appendData:DATA(value)];
}
NSString *formstring = @"\r\n";
[result appendData:DATA(formstring)];
}
NSString *formstring =[NSString stringWithFormat:@"--%@--\r\n", kBoundary];
[result appendData:DATA(formstring)];
return result;
}
@end










网友评论