我想知道是否有办法使用PHAsset获取原始文件名?
我使用以下代码来提取文件信息.
[[PHImageManager defaultManager] requestImageDataForAsset:asset options:requestOption resultHandler:^(NSData *imageData, NSString *dataUTI, UIImageOrientation orientation, NSDictionary *info) {
entity.fileUrl = [info objectForKey:@"PHImageFileURLKey"];
entity.filename = [[NSFileManager defaultManager] displayNameAtPath:[ entity.fileUrl path]];
}];
Run Code Online (Sandbox Code Playgroud)
但是,它没有返回原始名称,但格式为"img_123"的名称我刚检查了官方苹果文档.已经推出了一个新类PHAssetResource 和originalFilenameiOS 9+中可用的属性.问题是我使用了基于Photos框架的图像选择器库CTAssetsPickerController ; 它返回拾取的图像作为PHAsset对象.PS.我正在寻找与iOS 8兼容的解决方案:).谢谢!
我刚刚开始玩Capycabra + poltergeist,执行我的Capy测试rspec ./spec/features/test_spec.rb
后出现以下错误:
Failure/Error: visit '/item/new'
ArgumentError: rack-test requires a rack application, but none was given
Run Code Online (Sandbox Code Playgroud)
此外,我有一些标准的rspec测试,每当我尝试执行所有测试时,rspec测试成功通过,但只有capy测试失败并出现奇怪的错误
ActionView::Template::Error: couldn't find file 'jquery.min' (in app/assets/javascripts/application.js:13)
Run Code Online (Sandbox Code Playgroud)
这让我感到困惑.
我在stackoverflow上查看了几个类似的线程,在某些情况下,错误是缺少config.include specyhel.rb中的Capybara :: DSL或测试的错误位置.我做了相应的更改,但它不起作用,错误仍然是相同的.
我的spec_helper.rb文件
require 'capybara'
require 'capybara/dsl'
require 'capybara/poltergeist'
Capybara.javascript_driver = :poltergeist
RSpec.configure do |config|
config.include Capybara::DSL
end
Run Code Online (Sandbox Code Playgroud)
完整版spec_helper:http://pastebin.com/qkANfu39
测试文件:
#spec/features/test_spec.rb
require 'spec_helper'
describe 'accessibility of webpage' do
it 'should access web page' do
visit '/item/new'
expect(page).to have_content("Something")
end
end
Run Code Online (Sandbox Code Playgroud)
思考?
目前我正在使用以下代码上传视频:
NSURLRequest *urlRequest = [[AFHTTPRequestSerializer serializer] multipartFormRequestWithMethod:@"POST" URLString:[[entity uploadUrl]absoluteString] parameters:entity.params constructingBodyWithBlock:^(id<AFMultipartFormData> formData) {
[UploadModel getAssetData:entity.asset resultHandler:^(NSData *filedata) {
NSString *mimeType =[FileHelper mimeTypeForFileAtUrl:entity.fileUrl];
// NSError *fileappenderror;
[formData appendPartWithFileData:filedata name:@"data" fileName: entity.filename mimeType:mimeType];
}];
} error:&urlRequestError];
Run Code Online (Sandbox Code Playgroud)
GetAssetData方法
+(void)getAssetData: (PHAsset*)mPhasset resultHandler:(void(^)(NSData *imageData))dataResponse{
PHVideoRequestOptions *options = [[PHVideoRequestOptions alloc] init];
options.version = PHVideoRequestOptionsVersionOriginal;
[[PHImageManager defaultManager] requestAVAssetForVideo:mPhasset options:options resultHandler:^(AVAsset *asset, AVAudioMix *audioMix, NSDictionary *info) {
if ([asset isKindOfClass:[AVURLAsset class]]) {
NSURL *localVideoUrl = [(AVURLAsset *)asset URL];
NSData *videoData= [NSData dataWithContentsOfURL:localVideoUrl];
dataResponse(videoData);
}
}];
}
Run Code Online (Sandbox Code Playgroud)
这种方法的问题是,无论何时上传大/多个视频文件,应用程序都会耗尽内存.我想这是因为请求NSDATA(aka filedata …
目前我正在使用以下代码将文件上传到服务器
NSURLRequest *urlRequest = [[AFHTTPRequestSerializer serializer] multipartFormRequestWithMethod:@"POST" URLString:[[entity uploadUrl]absoluteString] parameters:entity.params constructingBodyWithBlock:^(id<AFMultipartFormData> formData) {
// Get file url
[UploadModel getAassetUrl:entity.asset resultHandler:^(NSURL *fileUrl) {
NSError *fileappenderror;
// Append
[formData appendPartWithFileURL:fileUrl name:@"data" error:&fileappenderror];
if (fileappenderror) {
[Sys MyLog: [fileappenderror localizedDescription] ];
}
}];
} error:&urlRequestError];
Run Code Online (Sandbox Code Playgroud)
/*getAassetUrl*/
+(void)getAassetUrl: (PHAsset*)mPhasset resultHandler:(void(^)(NSURL *imageUrl))dataResponse{
PHImageRequestOptions * requestOption = [[PHImageRequestOptions alloc] init];
requestOption.synchronous = YES;
requestOption.deliveryMode = PHImageRequestOptionsDeliveryModeFastFormat;
[[PHImageManager defaultManager] requestImageDataForAsset:mPhasset options:requestOption resultHandler:^(NSData *imageData, NSString *dataUTI, UIImageOrientation orientation, NSDictionary *info) {
dataResponse([info objectForKey:@"PHImageFileURLKey"]);
}];
}
Run Code Online (Sandbox Code Playgroud)
这种方法适用于模拟器,但在真实设备上失败:空文件很可能由于无法从本地存储读取而上载到服务器.日志显示通知
注意:Sandbox:MyApp(213)拒绝文件读取数据/private/var/mobile/Media/DCIM/101APPLE/IMG_1570.PNG
我相信这个笔记意味着app无法通过指定的路径访问该文件.此外,我尝试了一种替代方法,通过附加NSData来上传文件,NSData是从请求PHAsset数据返回的.但是这种方法在大型媒体文件的情况下是不可用的.因为整个文件都被加载到内存中. …
ios ×3
objective-c ×3
phasset ×3
afnetworking ×2
iphone ×2
capybara ×1
ios8 ×1
phantomjs ×1
rspec ×1