上传下载和文件操作


POST上传

    //1.生成url   后面不跟参数
   NSURL *url = [NSURL URLWithString:@"http://127.0.0.1:8080/UD/u?command=1"];
    //2.生成可变的请求
 NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
    //3.超时事件
  [request setTimeoutInterval:20];
    //4.POST请求
 [request setHTTPMethod:@"POST"];
    //5.设置Content-Type 在服务器可获得command
  [request addValue:@"multipart/form-data" forHTTPHeaderField:@"Content-Type"];
    //5.1用沙盒目录下工程资源路径获得data
//    NSString *path = [[NSBundle mainBundle] pathForResource:@"2" ofType:@"jpg"];
//    NSData *data = [NSData dataWithContentsOfFile:path];
    //6.获取工程的image
    UIImage *image = [UIImage imageNamed:@"2.jpg"];
//    UIImagePNGRepresentation(<#UIImage *image#>);
    //7.将image以JPEG格式压缩为data
    NSData *data = UIImageJPEGRepresentation(image, 0.5);
    //8.将数据添加至请求
    [request setHTTPBody:data];
    //8.1将data追加在请求数据中
//    NSInputStream *inputStream = [[NSInputStream alloc] initWithFileAtPath:path];
//    [request setHTTPBodyStream:inputStream];
    //9.发起请求,上传文件
 [NSURLConnection connectionWithRequest:request delegate:self];

服务器
String command = request.getParameter("command");
        System.out.println("-----------" + command);

        //获得当前数据的长度(其实就是图片数据的大小)
         int length = request.getContentLength();
        //创建一个字节数组,用来存放接收到的图片数据
         byte []buffer = new byte[length];

        //获得servlet的输入流(输入通道)
        ServletInputStream input = request.getInputStream();


        for(int i=0; i<length; i++)
        {
            //从输入通道中读取数据,每次读一个字节
            buffer[i] = (byte) input.read();
        }

        //FileInputStream  文件的输入流是读取牟高峰路径下的文件信息的

        //创建一个文件的输出流,把内存中的数据写到本地
        FileOutputStream output = new FileOutputStream("/Users/wxg/Desktop/test.jpg");
        output.write(buffer);
        //写完之后要关闭输出流
        output.close();

        out.println("文件上传成功");


下载

//获得沙盒目录Documents文件路径  返回添加文件夹路径
-(NSString *)getFilePathWith:(NSString *)aPath
{
    return [NSHomeDirectory() stringByAppendingPathComponent:[NSString stringWithFormat:@"Documents/%@", aPath]];
}
- (void)viewDidLoad {
    [super viewDidLoad];
//1.文件管理器创建
    NSFileManager *manager = [NSFileManager defaultManager];
    //2.判断路径下是否有该文件夹
    if (![manager fileExistsAtPath:[self getFilePathWith:@"Download"]])
        {
        //2.1创建文件夹
        //        路径  过渡目录  描述信息  错误信息
        [manager createDirectoryAtPath:[self getFilePathWith:@"Download"] withIntermediateDirectories:YES attributes:nil error:nil];
    }
    //3.生成文件目录
    NSString *path = [self getFilePathWith:@"Download/test.dmg"];
    //4.判断路径下是否有该文件
    if (![manager fileExistsAtPath:path]) {
        //4.1创建文件
//        创建一个文件  文件路径  内容  描述信息
        [manager createFileAtPath:path contents:nil attributes:nil];
    }
    //5.
    _handel = [[NSFileHandle fileHandleForWritingAtPath:path] retain];
}

xcode 文件操作

 
对文件的操作是一项很基本的人际交互过程,这里简单总结一下常用的文件操作内容
1.沙盒的概念
沙盒是iPhone开发中的一个特有的概念,指的是程序运行时的存储空间范围。
出于对安全的考虑,苹果把iPhone中运行的程序限定在一个文件夹内,用户的任何操作都只能在这个文件夹内完成,绝不允许用户访问这个文件夹外的任何文件夹,这个限定文件夹就是“沙盒”。
可以这样理解,你的程序就像被关在一个装满沙子的盒子里面,无论你的程序怎么折腾,也不过是在沙子上留下点痕迹而已,就算出了再大的问题,用手一抹就恢复原状了。

2.获取路径
沙盒中默认有三个目录Documents、Library和tmp。而我们通常把文件存储在Documents中。获取其路径的方法如下:
//获取Document文件夹路径
NSArray*path=NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,NSUserDomainMask,YES);
NSString *pathDocuments=[path objectAtIndex:0];
可以看到,第一次获取的地址其实是一个数组,我们取出其中的第一项才是我们想要获取的路径。那么当然可以这样:
NSString *pathDocuments=[NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) objectAtIndex:0];

3.创建文件与将内容写入文件
我们之前获取的路径是目录的路径,所以我们需要手动为其补全为文件路径
NSString *createFileName=@"new.txt";//文件名
NSString *createPath=[NSString stringWithFormat:@"%@/%@",pathDocuments,createFileName];//用文件名补全路径
if ([[NSFileManager defaultManager] fileExistsAtPath:createPath])//判断文件是否已存在
{
NSLog(@"文件已存在!");
}
else
{
NSData *data = [@"这里是新文件的内容" dataUsingEncoding:NSUTF8StringEncoding];//新文件的初始数据
[[NSFileManager defaultManager] createFileAtPath:createPath contents:data attributes:nil];//创建文件
}

多种对象类型都有直接写入文件的方法
例:
[userInfoDict writeToFile:filePath atomically:YES];
4.删除文件
NSString *deletePath=[NSString stringWithFormat:@"%@/%@",pathDocuments,fileName];//补全文件名
NSLog(@"%@",deletePath);
NSError *error;
[fileManager removeItemAtPath:deletePath error:&error];

5.读取文件
多种类型的对象创建时都可以直接从文件获取数据,但是切记要用完整路径
 
NSArray *readArray=[NSArray arrayWithContentsOfFile:filePath];
NSDictionary *readDict=[NSDictionary dictionaryWithContentsOfFile:filePath];
UIImage *readImage=[UIImage imageWithContentsOfFile:filePath];

6.获取文件信息
获取文件信息是fileManager的一个方法,信息包括文件的创建时间,修改时间,是否隐藏扩展名,以及文件大小等属性。
使用方法如下
 
NSFileManager *fileMng=[[NSFileManager alloc] init];
NSDictionary *attrDict=[fileMng attributesOfItemAtPath:filePath error:NULL];

文件信息保存在attrDict中


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值