iOS 获取本地文件的各种坑

1.无论:TXT,EPUB,PDF等各种格式的文件,保存到本地的时候,最好都保存成字母或者数字,不要保存成汉字,否则,在取文件的时候,由于编码的问题,各种瓦特

2.如果文件名真的保存成了汉字,那么进行转码的方法是:

[fileName
                                                                       stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]]];//不这样处理会返回nil];

3.pdf的坑:由于后台返回的文件格式都是dat,需要本地动态判断文件格式,因此在判断PDF的时候,就遇到了很多问题

1. 在NSURL和filePath之间转换的时候,虽然filePath是一个string,但是不能用URL.absoluteString这个方法,应该用URL.path 这个方法,不然后面取不到文件

string转URL的时候,这样:

[NSURL URLWithString:_model.filePath]

2,把文件路径中的.dat 替换成 .pdf,没卵用:

[aFilePath  stringByReplacingOccurrencesOfString:@".dat" withString:@".pdf"]

必须重命名文件名

//获取本地的PDF文件
+(CGPDFDocumentRef)pdfRefByFilePath:(NSString *)aFilePath
{
//     CFURLRef pdfURL = CFBundleCopyResourceURL(CFBundleGetMainBundle(), (__bridge CFStringRef)[aFilePath lastPathComponent], NULL, (__bridge CFStringRef)@"files");
//    CGPDFDocumentRef pdfDocument = CGPDFDocumentCreateWithURL((CFURLRef)pdfURL);
//
    CFStringRef path;
    CFURLRef url;
    CGPDFDocumentRef document;
    size_t count;

    //pdf的扩展名必须重命名一下,才可以取到
    NSString* aFilePath2 = [aFilePath  stringByReplacingOccurrencesOfString:@".dat" withString:@".pdf"];
    NSError* error;
    //[[NSFileManager defaultManager] moveItemAtPath:aFilePath2 toPath:aFilePath2 error:nil];
    NSFileManager* fileManager =[NSFileManager defaultManager];
    if ([fileManager fileExistsAtPath:aFilePath]) {
        //get new resource path with different extension

        //copy it over
        [fileManager copyItemAtPath:aFilePath toPath:aFilePath2 error:&error];
    }

    path = CFStringCreateWithCString (NULL, [aFilePath2   UTF8String],
                                      kCFStringEncodingUTF8);
    url = CFURLCreateWithFileSystemPath (NULL, path,
                                         kCFURLPOSIXPathStyle, 0);
    CFRelease (path);
    document = CGPDFDocumentCreateWithURL (url);
    CFRelease(url);
    if (document == nil) {
        [fileManager copyItemAtPath:aFilePath2 toPath:aFilePath error:&error];
    }

//    NSString* filePath = [aFilePath stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
//    CFStringRef path;
//    CFURLRef url;
//    CGPDFDocumentRef document;
//    filePath = [aFilePath  stringByReplacingOccurrencesOfString:@".dat" withString:@".pdf"];
//    path = CFStringCreateWithCString(NULL, [filePath UTF8String], kCFStringEncodingUTF8);
//    url = CFURLCreateWithFileSystemPath(NULL, path, kCFURLPOSIXPathStyle, 0);
//    CFRelease(path);
//    document = CGPDFDocumentCreateWithURL(url);
//    CFRelease(url);

    return document;

}
时间: 2024-11-09 01:51:36

iOS 获取本地文件的各种坑的相关文章

iOS获取本地视频和网络URL视频的缩略图方法

iOS获取本地视频和网络URL视频的缩略图方法 字数222 阅读612 评论0 喜欢13 首先大家先添加AVFoundation和CoreMedia.framework两个框架 第一种本地视频获取缩略图 NSString *path = @"www.51ios.net/本地路径" MPMoviePlayerController *51iosMPMovie = [[MPMoviePlayerController alloc] initWithContentURL:[NSURL fileU

iOS 获取本地视频的缩略图

iOS 获取本地视频的缩略图 (2012-10-10 20:06:27) 转载▼ 标签: 视频 缩略图 本地 杂谈 分类: ios +(UIImage *)getImage:(NSString *)videoURL { AVURLAsset *asset = [[AVURLAsset alloc] initWithURL:[NSURL fileURLWithPath:videoURL] options:nil]; AVAssetImageGenerator *gen = [[AVAssetIma

前端用js获取本地文件的内容

这里要写成input的形式 调用upload函数 传递的参数就表示所选的文件<input type="file" onchange="upload(this)" /> //前端读取本地文件的内容 下面代码中的this.result即为获取到的内容 function upload(input) { //支持chrome IE10 if (window.FileReader) { var file = input.files[0]; filename = f

使用WWW获取本地文件夹的XML配置文件

Unity3D读取本地文件可以使用Resources.Load来读取放在Resources文件夹下的文件,如果不是放在该文件夹下,则可以通过WWW类来读取. 譬如读取xml的配置文件. /// <summary> /// 读取颜色配置 /// </summary> /// <returns></returns> public List<Color> GetColorXml() { string xmlPath = Application.data

javascript 学习笔记 -- js获取本地文件信息

JavaScript是跑在浏览器中,所以对于JavaScript读取本地文件不想c++ 和 java那样easy.网上有很多关于读取本地文件的方法,许多是用ActiveXObject控件.ActiveXObject是微软特有的,只能在IE内核的浏览器中运行,所以也不是一个好方法. 这里,介绍一种用Xml读取本地文件的方法. 第一步: Ngnix 服务器配置 下载ngnix(http://nginx.org/en/download.html), 解压缩之后,打开nginx\conf\nginx.c

iOS获取本地ip(基本通用)

今天有个朋友问我怎样訪问手机ip,上网找了几个,用了近200多行代码,最后发现头文件用的居然还是Linux中的,OC没有这个头文件.感觉socket本身应该能够后去自己的ip就试了一下,果然7.8行代码就攻克了.这个基本是c的socket,差点儿通用,别的平台也能够使用. - (NSString *)getLocalIP{ struct sockaddr_in sa; socklen_t len = sizeof(sa); if(getsockname(sockfd, (struct socka

JS获取本地文件并且解析文件内容(XML,TXT)

$(function(){ $("body").on("change", "#file", function (event) { uploadfile(this,event); }) function uploadfile(){ var files = event.target.files, file; if (files && files.length > 0) { // 获取目前上传的文件 file = files[0]

获取本地文件(文件夹)上传,无点击事件

//url,realPath必填参数 1 public String updatebendi()throws Exception{ 2 ServletContext servletContext = ServletActionContext.getServletContext(); 3 //获取项目根目录路径 4 //String realPath= servletContext.getRealPath("/")+"image/yyy/yuangong"; 5 St

IOS -- 获取本地图片和网络图片的大小size

// 获取图片的size CGSize size = [UIImage imageNamed:@"regStep2_sex"].size; 获取网络图片的尺寸: // 根据图片url获取图片尺寸 +(CGSize)getImageSizeWithURL:(id)imageURL { NSURL* URL = nil; if([imageURL isKindOfClass:[NSURL class]]){ URL = imageURL; } if([imageURL isKindOfCl