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



  • 相关阅读:
    Oracle 推出 ODAC for Entity Framework 和 LINQ to Entities Beta版
    Entity Framework Feature CTP 5系列文章
    MonoDroid相关资源
    MSDN杂志上的Windows Phone相关文章
    微软学Android Market推出 Web Windows Phone Marketplace
    使用 Visual Studio Agent 2010 进行负载压力测试的安装指南
    MonoMac 1.0正式发布
    Shawn Wildermuth的《Architecting WP7 》系列文章
    使用.NET Mobile API即51Degrees.mobi检测UserAgent
    MongoDB 客户端 MongoVue
  • 原文地址:https://www.cnblogs.com/slgkaifa/p/6944543.html
Copyright © 2011-2022 走看看