Allow video uploads
Summary: Allows video uploads from native iOS by using the proper network handler, `RCTAssetsLibrary` rather than `RCTImageLoader`. Currently, uploading a camera roll video via its `assets-library://` URI would upload the first image frame. This fixes it by checking if the `assets-library://` URI is of the extension `MOV`, and if so, declines to process it from `RCTImageLoader`. Reviewed By: javache Differential Revision: D5223351 fbshipit-source-id: 8de92c5bb72acb02ed4d9fb92d69f68c8b5d1b36
This commit is contained in:
parent
53d5504f40
commit
8dd15f2c87
|
@ -735,6 +735,30 @@ static UIImage *RCTResizeImageIfNeeded(UIImage *image,
|
|||
- (BOOL)canHandleRequest:(NSURLRequest *)request
|
||||
{
|
||||
NSURL *requestURL = request.URL;
|
||||
|
||||
// If the data being loaded is a video, return NO
|
||||
// Even better may be to implement this on the RCTImageURLLoader that would try to load it,
|
||||
// but we'd have to run the logic both in RCTPhotoLibraryImageLoader and
|
||||
// RCTAssetsLibraryRequestHandler. Once we drop iOS7 though, we'd drop
|
||||
// RCTAssetsLibraryRequestHandler and can move it there.
|
||||
static NSRegularExpression *videoRegex = nil;
|
||||
if (!videoRegex) {
|
||||
NSError *error = nil;
|
||||
videoRegex = [NSRegularExpression regularExpressionWithPattern:@"(?:&|^)ext=MOV(?:&|$)"
|
||||
options:NSRegularExpressionCaseInsensitive
|
||||
error:&error];
|
||||
if (error) {
|
||||
RCTLogError(@"%@", error);
|
||||
}
|
||||
}
|
||||
|
||||
NSString *query = requestURL.query;
|
||||
if (query != nil && [videoRegex firstMatchInString:query
|
||||
options:0
|
||||
range:NSMakeRange(0, query.length)]) {
|
||||
return NO;
|
||||
}
|
||||
|
||||
for (id<RCTImageURLLoader> loader in _loaders) {
|
||||
// Don't use RCTImageURLLoader protocol for modules that already conform to
|
||||
// RCTURLRequestHandler as it's inefficient to decode an image and then
|
||||
|
|
Loading…
Reference in New Issue