zoukankan      html  css  js  c++  java
  • AFNetworking 3.0携带參数上传文件Demo


    一、服务端代码:

    服务端是java用国产nutz搞的,实际mvc框架都大同小异。就是提交文件的同一时候还带了个表单參数

    	@AdaptBy(type=UploadAdaptor.class, args={"${app.root}/WEB-INF/tmp/user_avatar", "8192", "utf-8", "20000", "102400"})
    	@At
    	@Aop("redis")
    	public Object uploadAvatar(@Param("file")TempFile tf, @Param("token") String token, AdaptorErrorContext err) {
    		
    		// token 相应client參数名
    		NutMap re = new NutMap();
    		if (err != null && err.getAdaptorErr() != null) {
    			return re.setv("code", 3).setv("msg", "文件大小不符合规定");
    		}
    		if (tf == null) {
    			return re.setv("code", 4).setv("msg", "空文件");
    		}
    		
    		if (Strings.isBlank(token)) {
    			return re.setv("code", 2).setv("msg", "");// 没有token
    		}
    		String member_id = jedis().get(token);// 从redis依据token获取member_id
    		if (Strings.isBlank(member_id)) {
    			return re.setv("code", 2).setv("msg", "");// 未登录
    		}
    		File f = tf.getFile(); // 这个是保存的暂时文件
    		FieldMeta meta = tf.getMeta(); // 这个原本的文件信息
    		String oldName = meta.getFileLocalName(); // 这个时原本的文件名
    
    		PropertiesProxy property = new PropertiesProxy("/custom/my.properties");
    
    		String filename = System.currentTimeMillis() + oldName.substring(oldName.lastIndexOf("."));
    		StringBuffer sb =new StringBuffer(property.get("my.filepath"));
    		sb.append("\avator\");
    		sb.append(filename);
    		
    		StringBuffer sbdb =new StringBuffer("/avator/");
    		sbdb.append(filename);
    
    		try {
    			Files.move(f, new File(sb.toString()));
    			//更新数据库
    			dao.update(Member.class,Chain.make("avator", sbdb.toString()),Cnd.where("member_id", "=", member_id));
    			
    		} catch (IOException e) {
    			// TODO Auto-generated catch block
    			e.printStackTrace();
    			return re.setv("code", 1);
    		}
    
    		return re.setv("code", 0).setv("msg", "");
    	}


    二、client代码:

    用html表单提交的话,通常是这种

    		<form action="${base}/usr/uploadAvatar" method="post"
    			enctype="multipart/form-data">
    			头像文件 <input type="file" name="file">
    			<p />
    			<div>
    				token:<input name="token" >
    			</div>
    			<p />
    			<button type="submit">更新头像</button>
    		</form>


    IOS搞的话。这边用的是AFNetworking 3.0,所以是这样写的

    - (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info
    {
        NSLog(@"图片选中");
        //截取图片
        UIImage *image = [info objectForKey:UIImagePickerControllerEditedImage];
        NSData *imageData = UIImageJPEGRepresentation(image, 0.001);
        self.mv.portraitImageView.image = image;
        
        AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager];
        manager.responseSerializer.acceptableContentTypes = [NSSet setWithObjects:@"text/html",@"text/plain", nil];
        // 參数
        NSMutableDictionary *parameter = [NSMutableDictionary dictionary];
        parameter[@"token"] = "param....";
    	// 訪问路径
        NSString *stringURL = [NSString stringWithFormat:@"%@%@",HOSTURL,kUploadAvatar];
        
        [manager POST:stringURL parameters:parameter constructingBodyWithBlock:^(id<AFMultipartFormData> formData) {
            // 上传文件
            NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
            formatter.dateFormat = @"yyyyMMddHHmmss";
            NSString *str = [formatter stringFromDate:[NSDate date]];
            NSString *fileName = [NSString stringWithFormat:@"%@.jpg", str];
            
            [formData appendPartWithFileData:imageData name:@"file" fileName:fileName mimeType:@"image/png"];
            
        } success:^(AFHTTPRequestOperation *operation, id responseObject) {
            NSLog(@"上传成功");
        } failure:^(AFHTTPRequestOperation *operation, NSError *error) {
            NSLog(@"上传错误");
        }];
    }


    转载请注明:http://blog.csdn.net/wangqiuyun/article/details/50220465



  • 相关阅读:
    数据--第53课
    数据--第52课
    数据--第51课
    标准模板库中的优先队列(priority_queue)
    进程的定义
    进程的基本概念
    循环不变式
    插入排序
    模板声明
    标准模板库中的队列(queue)
  • 原文地址:https://www.cnblogs.com/slgkaifa/p/6944543.html
Copyright © 2011-2022 走看看