一、服务端代码:
服务端是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 对应客户端参数名
- 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", "");
- }
二、客户端代码:
用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 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