首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >无法在iOS上使用react-native-image-picker

无法在iOS上使用react-native-image-picker
EN

Stack Overflow用户
提问于 2020-09-20 16:06:50
回答 2查看 2.2K关注 0票数 0

我使用react-native-image-picker在服务器上选择并上传图片。它在android上运行得很好,但是在iOS上抛出了错误。npm link提供了一条说明:“在iOS上,不要假设返回的绝对uri会持续存在。请参阅#107”它意味着什么?这个库能在iOS上工作吗?我正在尝试使用iOS模拟器,它可以正确地显示图像,但当我尝试使用axios上传到服务器上时,它抛出错误"Missing request token for request: { URL: file://“like here有没有其他替代的react-native库可以用iOS和0x60000253e5a0>上传图像?

EN

回答 2

Stack Overflow用户

发布于 2020-09-21 09:25:44

如果您尝试将文件上载到服务器,react-native-image-picker & react-native-image-crop-picker将不能在iOS模拟器上工作。它将抛出:

请求缺少请求令牌:请求:

{ URL: 0x60000253e5a0>错误。

它在android和ios的真实设备上都运行得很好。只需使用如下所示的文件名。

代码语言:javascript
复制
ImagePicker.openPicker({
  width: 300,
  height: 400,
  cropping: true,
  compressImageMaxHeight: 300,
  compressImageMaxWidth: 400,
  compressImageQuality: 0.5,
  mediaType: 'photo',
}).then(image => {
 
let filename = image.path.split('/').pop();
  
  let formData = new FormData();

  formData.append('file', {
    name: Platform.OS === 'android' ? filename : image.filename,
    type: image.mime,
    uri: image.path, 
  });
}
票数 0
EN

Stack Overflow用户

发布于 2020-09-29 09:54:41

这是一个内部错误。试试看。

转到node_modules/react-native/Image/RCTLocalAssetImageLoader.mm并将此行更改为:

代码语言:javascript
复制
 - (RCTImageLoaderCancellationBlock)loadImageForURL:(NSURL *)imageURL
                                           size:(CGSize)size
                                          scale:(CGFloat)scale
                                     resizeMode:(RCTResizeMode)resizeMode
                                progressHandler:(RCTImageLoaderProgressBlock)progressHandler
                             partialLoadHandler:(RCTImageLoaderPartialLoadBlock)partialLoadHandler
                              completionHandler:(RCTImageLoaderCompletionBlock)completionHandler
 {
   __block auto cancelled = std::make_shared<std::atomic<bool>>(false);
   RCTExecuteOnMainQueue(^{
     if (cancelled->load()) {
       return;
     }

     UIImage *image = RCTImageFromLocalAssetURL(imageURL);
     if (image) {
       if (progressHandler) {
         progressHandler(1, 1);
       }
       completionHandler(nil, image);
     } else {
       NSString *message = [NSString stringWithFormat:@"Could not find image %@", imageURL];
       RCTLogWarn(@"%@", message);
       completionHandler(RCTErrorWithMessage(message), nil);
     }
   });

   return ^{
     cancelled->store(true);
   };
 }
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63976845

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档