上传文件至服务器

//上传图片
-(void)showActionSheet
{
    //在这里呼出下方菜单按钮项
    myActionSheet = [[UIActionSheet alloc]
                     initWithTitle:nil
                     delegate:self
                     cancelButtonTitle:@"取消"
                     destructiveButtonTitle:nil
                     otherButtonTitles: @"打开照相机", @"从手机相册获取",nil];

    [myActionSheet showInView:self.view];
    [myActionSheet release];

}

- (void)actionSheet:(UIActionSheet *)actionSheet clickedButtonAtIndex:(NSInteger)buttonIndex
{

    //呼出的菜单按钮点击后的响应
    if (buttonIndex == myActionSheet.cancelButtonIndex)
    {
        NSLog(@"取消");
    }

    switch (buttonIndex)
    {
        case 0:  //打开照相机拍照
            [self takePhoto];
            break;

        case 1:  //打开本地相册
            [self LocalPhoto];
            break;
    }
}

//开始拍照
-(void)takePhoto
{
    UIImagePickerControllerSourceType sourceType = UIImagePickerControllerSourceTypeCamera;
    if ([UIImagePickerController isSourceTypeAvailable: UIImagePickerControllerSourceTypeCamera])
    {
        UIImagePickerController *picker = [[UIImagePickerController alloc] init];
        picker.delegate = self;
        //设置拍照后的图片可被编辑
        picker.allowsEditing = YES;
        picker.sourceType = sourceType;
        [picker release];
        [self presentViewController:picker animated:YES completion:nil];
    }else
    {
        NSLog(@"模拟其中无法打开照相机,请在真机中使用");
    }
}

//打开本地相册
-(void)LocalPhoto
{
    UIImagePickerController *picker = [[UIImagePickerController alloc] init];

    picker.sourceType = UIImagePickerControllerSourceTypePhotoLibrary;
    picker.delegate = self;
    //设置选择后的图片可被编辑
    picker.allowsEditing = YES;
    [self presentViewController:picker animated:YES completion:nil];
    [picker release];
}

//当选择一张图片后进入这里
-(void)imagePickerController:(UIImagePickerController*)picker didFinishPickingMediaWithInfo:(NSDictionary *)info

{

    NSString *type = [info objectForKey:UIImagePickerControllerMediaType];

    //当选择的类型是图片
    if ([type isEqualToString:@"public.image"])
    {   NSLog(@"您选择了该图片");

        //先把图片转成NSData
        UIImage* image = [info objectForKey:@"UIImagePickerControllerOriginalImage"];
        NSData *data;
        if (UIImagePNGRepresentation(image) == nil)
        {
            data = UIImageJPEGRepresentation(image, 1.0);
        }
        else
        {
            data = UIImagePNGRepresentation(image);
        }

        //图片保存的路径
        //这里将图片放在沙盒的documents文件夹中
        NSString * DocumentsPath = [NSHomeDirectory() stringByAppendingPathComponent:@"Documents"];

        //文件管理器
        NSFileManager *fileManager = [NSFileManager defaultManager];

        //把刚刚图片转换的data对象拷贝至沙盒中 并保存为image.png
        [fileManager createDirectoryAtPath:DocumentsPath withIntermediateDirectories:YES attributes:nil error:nil];
        [fileManager createFileAtPath:[DocumentsPath stringByAppendingString:@"/image.png"] contents:data attributes:nil];

        //得到选择后沙盒中图片的完整路径
        filePath = [[NSString alloc]initWithFormat:@"%@%@",DocumentsPath,  @"/image.png"];

        //关闭相册界面
        [picker dismissViewControllerAnimated:YES completion:nil];

        [self imageUpload:image];

    }

}

- (void)imagePickerControllerDidCancel:(UIImagePickerController *)picker
{
    NSLog(@"您取消了选择图片");
    [picker dismissViewControllerAnimated:YES completion:nil];
}

//上传图片到服务器方法,采用了ASIFormDataRequest方法

- (void) imageUpload:(UIImage *) image{

    UIImage *im = [UIImage imageWithContentsOfFile:filePath];//通过path图片路径获取图片
    NSData *data = UIImagePNGRepresentation(im);//获取图片数据
    /*
     ios中获取图片的方法有两种,一种是UIImageJPEGRepresentation ,一种是UIImagePNGRepresentation
     前者获取到图片的数据量要比后者的小很多。。
     */
    //服务器地址
    NSURL *url = [NSURL URLWithString:@"这里写入你的服务器上传地址"];
    aRequest = [[ASIFormDataRequest alloc] initWithURL:url];

    [aRequest setDelegate:self];//代理
    [aRequest setRequestMethod:@"POST"];
    //这个参数还不是很清楚
    [aRequest addData:data withFileName:@"test.png" andContentType:@"image/png" forKey:@"file"];
    [aRequest addRequestHeader:@"Content-Type" value:@"multipart/form-data"];//这里的value值 需与服务器端 一致

    [aRequest startAsynchronous];//开始。异步
    [aRequest setDidFinishSelector:@selector(headPortraitSuccess)];//当成功后会自动触发 headPortraitSuccess 方法
    [aRequest setDidFailSelector:@selector(headPortraitFail)];//如果失败会 自动触发 headPortraitFail 方法

}

-(void)headPortraitSuccess{
    NSData * myResponseData = [aRequest responseData];  //获取数据 :  调试的时候,在这里, myResponseData的值一直是nil,不知道为什么?
    //将接收的数据转换成NSString类型并打印出来
    NSString *result = [[NSString alloc] initWithData:myResponseData encoding:NSUTF8StringEncoding];
    NSLog(@"result------------>%@", result);
    NSDictionary *data = [result objectFromJSONStringWithParseOptions:JKParseOptionLooseUnicode];
    NSArray *imgArray = [data objectForKey:@"data"];
    NSString *[email protected]"http://twww.51qed.com";
    if ([imgArray count]) {
        NSDictionary *imgInfo = [imgArray objectAtIndex:0];
        imgpath = [imgpath stringByAppendingString:[imgInfo objectForKey:@"img"]];
        NSLog(@"imgpath------------>%@", imgpath);
    }
    //设置H5图片更新,ios调用JS代码
    [webview stringByEvaluatingJavaScriptFromString:[NSString stringWithFormat:@"setNewImg('%@');",imgpath]];
    NSLog(@"上传成功!");
    [aRequest release];

}

-(void)headPortraitFail{

    NSLog(@"上传失败!");

}

//开始request请求
- (void)requestStarted:(ASIHTTPRequest *)request{

    NSLog(@"开始请求!");

}
@end
需导入
<pre name="code" class="objc">#import "ASIHTTPRequest.h"
#import "ASIFormDataRequest.h"
#import "JSONKit.h"

这三个头文件

				
时间: 2024-10-13 05:33:36

上传文件至服务器的相关文章

利用put上传文件到服务器

#import "KUViewController.h" #import "KUProgress.h" @interfaceKUViewController ()<NSURLSessionTaskDelegate> //下载进度的类,继承UIview @property (weak, nonatomic) IBOutlet  KUProgress *progressView; @end @implementation KUViewController -

本地上传文件到服务器,从服务器下载文件到本地

最近在做项目的时候涉及到了文件的上传.下载,以前学习IO时也没有搞得多清楚,在网上找了些上传下载的例子,然后修改了部分.经测试,上传下载文件暂时能用,下面是上传和下载的方法: 1.本地上传文件到服务器 html代码: <form id="uploadDatumInfo" name="uploadDatumInfo" method="post" enctype="multipart/form-data" target=&q

Android上传文件至服务器(转)

本实例实现每隔5秒上传一次,通过服务器端获取手机上传过来的文件信息并做相应处理:采用Android+Struts2技术. 一.Android端实现文件上传 1).新建一个Android项目命名为androidUpload,目录结构如下: 2).新建FormFile类,用来封装文件信息 package com.ljq.utils; import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundExce

put上传文件的服务器的配置

1,HTTP常见的方法 GET 获取指定资源 POST 2M 向指定资源提交数据进行处理请求,在RESTful风格中用于新增资源 HE A D 获取指定资源头部信息PUT 替换指定资源(不支持浏览器操作) DELETE 删除指定资源   2,配置服务器的put请求方式:   1> n 打开终端p cd /etc/apache2p sudo vim httpd.conf n 在vim中输入p /httpd-dav.conf? 查找httpd-dav.confp 按0将光标移动至行首p 按x将行首的

C# FTP上传文件至服务器代码

C# FTP上传文件至服务器代码 /// <summary> /// 上传文件 /// </summary> /// <param name="fileinfo">需要上传的文件</param> /// <param name="targetDir">目标路径</param> /// <param name="hostname">ftp地址</param&g

php上传文件到服务器 (注意权限)

表单<input type="file" name="upload_pic"> php上传文件到服务器,注意需要获取权限: if($_FILES['upload_pic']['size'] > 0) { $file_path=dirname(__FILE__); //文件目录 $file_path=str_replace('\\','/',substr($file_path,0,strpos($file_path,'application'))).

python 上传文件到服务器

def upload(filename): #buld post body data boundary = '--xxxxxxxxxxxxxxxx ' http_url='http://xx.xx.com/upload.php' data = [] data.append('--%s' % boundary) fp=open(filename,'rb') data.append('Content-Disposition: form-data; name="%s"; filename=&

Android中利用HTTP协议实现上传文件到服务器

首先我们需要使用HTTP协议发送数据,我们就要知道HTTP发送上传文件到服务器的时候需要哪些头字段已经相关的配置,请看下图 这是使用浏览器模拟上传文件到服务器时候所发送的请求,我们可以看到它包含了请求头字段和实体部分,但是多了一个---------------------------7da2137580612,它实际上是一条分隔线,用于分隔实体数据的,他在使用分隔实体数据的时候会在前面包含多两个"-"而在结束的时候会在除了在前面都出两个减号"-"之外,还会在末尾都出

【经验记录】Android上传文件到服务器

Android中实现上传文件,其实是很简单的,和在java里面是一样的,基本上都是熟悉操作输出流和输入流!还有一个特别重要的就是需要配置content-type的一些参数!如果这些都弄好了,上传就很简单了,下面是我写的一个上传的工具类: package com.spring.sky.image.upload.network; import java.io.DataOutputStream; import java.io.File; import java.io.FileInputStream;

工作笔记4.struts2上传文件到服务器

本文介绍两种:上传文件到服务器的方式   一种是提交Form表单:另一种是ajaxfileupload异步上传. 一.JSP中:     1.提交Form表单 为了能完成文件上传,我们应该将这两个表单域所在表单的enctype属性设置为multipart/form-data. <form action="uploadFiles_fourInsuranceFirstUpload.action" method="post" enctype="multip