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
|
- (BOOL)canHandleRequest:(NSURLRequest *)request
|
||||||
{
|
{
|
||||||
NSURL *requestURL = request.URL;
|
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) {
|
for (id<RCTImageURLLoader> loader in _loaders) {
|
||||||
// Don't use RCTImageURLLoader protocol for modules that already conform to
|
// Don't use RCTImageURLLoader protocol for modules that already conform to
|
||||||
// RCTURLRequestHandler as it's inefficient to decode an image and then
|
// RCTURLRequestHandler as it's inefficient to decode an image and then
|
||||||
|
|
Loading…
Reference in New Issue