美文网首页
mac localhost 上传图片

mac localhost 上传图片

作者: 喵喵粉 | 来源:发表于2021-05-06 18:14 被阅读0次
  1. 看blog
    https://blog.csdn.net/toopoo/article/details/90404695

上面文档是在其他位置文件夹下操作的,本文是在/Library/WebServer/Documents文件夹下操作。

  1. 修改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>
  1. /Library/WebServer/Documents的目录结构
    Documents

文件夹需要可读可写权限


修改权限
  1. 测试上传文件, upload_file.php文件保存路径为upload文件夹,在/Library/WebServer/Documents下创建upload文件夹

  2. 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

相关文章

网友评论

      本文标题:mac localhost 上传图片

      本文链接:https://www.haomeiwen.com/subject/hbbddltx.html