广告
返回顶部
首页 > 资讯 > 服务器 >react native如何实现往服务器上传网络图片
  • 264
分享到

react native如何实现往服务器上传网络图片

2024-04-02 19:04:59 264人浏览 安东尼
摘要

这篇文章主要介绍了React native如何实现往服务器上传网络图片,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。如下所示:let&nbs

这篇文章主要介绍了React native如何实现往服务器上传网络图片,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。

如下所示:

let common_url = 'Http://192.168.1.1:8080/'; //服务器地址
let token = '';  //用户登陆后返回的token

function uploadImage(url,params){
  return new Promise(function (resolve, reject) {
    let fORMData = new FormData();
    for (var key in params){
      formData.append(key, params[key]);
    }
    let file = {uri: params.path, type: 'application/octet-stream', name: 'image.jpg'};
    formData.append("file", file);
    fetch(common_url + url, {
      method: 'POST',
      headers: {
        'Content-Type': 'multipart/form-data;charset=utf-8',
        "x-access-token": token,
      },
      body: formData,
    }).then((response) => response.JSON())
      .then((responseData)=> {
        console.log('uploadImage', responseData);
        resolve(responseData);
      })
      .catch((err)=> {
        console.log('err', err);
        reject(err);
      });
  });

使用方法

let params = {
  userId:'abc12345',  //用户id
  path:'file:///storage/emulated/0/Pictures/image.jpg'  //本地文件地址
}
uploadImage('app/uploadFile',params )
  .then( res=>{
    //请求成功
    if(res.header.statusCode == 'success'){
      //这里设定服务器返回的header中statusCode为success时数据返回成功
      upLoadImgUrl = res.body.imgurl; //服务器返回的地址
    }else{
       //服务器返回异常,设定服务器返回的异常信息保存在 header.msgArray[0].desc
      console.log(res.header.msgArray[0].desc);
    }
  }).catch( err=>{ 
     //请求失败
  })

注意点

let file = {uri: params.path, type: 'application/octet-stream', name: 'image.jpg'}中的type也可能是multipart/form-data
formData.append("file", file)中的的file字段也可能是images

普通网络请求参数是JSON对象

图片上传的请求参数使用的是formData对象

总结:

React Native中虽然也内置了XMLHttpRequest 网络请求api(也就是俗称的ajax),但XMLHttpRequest 是一个设计粗糙的 API,不符合职责分离的原则,配置和调用方式非常混乱,而且基于事件的异步模型写起来也没有现代的 Promise 友好。而Fetch 的出现就是为了解决 XHR 的问题,所以react Native官方推荐使用Fetch API。

fetch请求示例如下:

return fetch('http://facebook.GitHub.io/react-native/movies.json')
  .then((response) => response.json())
  .then((responseJson) => {
   return responseJson.movies;
  })
  .catch((error) => {
   console.error(error);
  });

使用Promise封装fetch请求

let common_url = 'http://192.168.1.1:8080/'; //服务器地址
let token = '';  

function fetchRequest(url, method, params = ''){
  let header = {
    "Content-Type": "application/json;charset=UTF-8",
    "accesstoken":token //用户登陆后返回的token,某些涉及用户数据的接口需要在header中加上token
  };
  console.log('request url:',url,params); //打印请求参数
  if(params == ''){  //如果网络请求中没有参数
    return new Promise(function (resolve, reject) {
      fetch(common_url + url, {
        method: method,
        headers: header
      }).then((response) => response.json())
        .then((responseData) => {
          console.log('res:',url,responseData); //网络请求成功返回的数据
          resolve(responseData);
        })
        .catch( (err) => {
          console.log('err:',url, err);   //网络请求失败返回的数据    
          reject(err);
        });
    });
  }else{  //如果网络请求中带有参数
    return new Promise(function (resolve, reject) {
      fetch(common_url + url, {
        method: method,
        headers: header,
        body:JSON.stringify(params)  //body参数,通常需要转换成字符串后服务器才能解析
      }).then((response) => response.json())
        .then((responseData) => {
          console.log('res:',url, responseData);  //网络请求成功返回的数据
          resolve(responseData);
        })
        .catch( (err) => {
          console.log('err:',url, err);  //网络请求失败返回的数据 
          reject(err);
        });
    });
  }
}

使用fetch请求,如果服务器返回的中文出现了乱码,则可以在服务器端设置如下代码解决:

produces="text/html;charset=UTF-8"

fetchRequest使用如下:
GET请求:
fetchRequest('app/book','GET')
  .then( res=>{
    //请求成功
    if(res.header.statusCode == 'success'){
      //这里设定服务器返回的header中statusCode为success时数据返回成功

    }else{
      //服务器返回异常,设定服务器返回的异常信息保存在 header.msgArray[0].desc
      console.log(res.header.msgArray[0].desc);
    }
  }).catch( err=>{ 
    //请求失败
  })

POST请求:

let params = {
  username:'admin',
  passWord:'123456'
}
fetchRequest('app/signin','POST',params)
  .then( res=>{
    //请求成功
    if(res.header.statusCode == 'success'){
      //这里设定服务器返回的header中statusCode为success时数据返回成功

    }else{
      //服务器返回异常,设定服务器返回的异常信息保存在 header.msgArray[0].desc 
      console.log(res.header.msgArray[0].desc);
    }
  }).catch( err=>{ 
    //请求失败
  })

fetch超时处理

由于原生的Fetch API 并不支持timeout属性,如果项目中需要控制fetch请求的超时时间,可以对fetch请求进一步封装实现timeout功能,代码如下:

fetchRequest超时处理封装


function timeout_fetch(fetch_promise,timeout = 10000) {
  let timeout_fn = null; 

  //这是一个可以被reject的promise
  let timeout_promise = new Promise(function(resolve, reject) {
    timeout_fn = function() {
      reject('timeout promise');
    };
  });

  //这里使用Promise.race,以最快 resolve 或 reject 的结果来传入后续绑定的回调
  let abortable_promise = Promise.race([
    fetch_promise,
    timeout_promise
  ]);

  setTimeout(function() {
    timeout_fn();
  }, timeout);

  return abortable_promise ;
}

let common_url = 'http://192.168.1.1:8080/'; //服务器地址
let token = '';  

function fetchRequest(url, method, params = ''){
  let header = {
    "Content-Type": "application/json;charset=UTF-8",
    "accesstoken":token //用户登陆后返回的token,某些涉及用户数据的接口需要在header中加上token
  };
  console.log('request url:',url,params); //打印请求参数
  if(params == ''){  //如果网络请求中没有参数
    return new Promise(function (resolve, reject) {
      timeout_fetch(fetch(common_url + url, {
        method: method,
        headers: header
      })).then((response) => response.json())
        .then((responseData) => {
          console.log('res:',url,responseData); //网络请求成功返回的数据
          resolve(responseData);
        })
        .catch( (err) => {
          console.log('err:',url, err);   //网络请求失败返回的数据    
          reject(err);
        });
    });
  }else{  //如果网络请求中带有参数
    return new Promise(function (resolve, reject) {
      timeout_fetch(fetch(common_url + url, {
        method: method,
        headers: header,
        body:JSON.stringify(params)  //body参数,通常需要转换成字符串后服务器才能解析
      })).then((response) => response.json())
        .then((responseData) => {
          console.log('res:',url, responseData);  //网络请求成功返回的数据
          resolve(responseData);
        })
        .catch( (err) => {
          console.log('err:',url, err);  //网络请求失败返回的数据 
          reject(err);
        });
    });
  }
}

感谢你能够认真阅读完这篇文章,希望小编分享的“react native如何实现往服务器上传网络图片”这篇文章对大家有帮助,同时也希望大家多多支持编程网,关注编程网服务器频道,更多相关知识等着你来学习!

--结束END--

本文标题: react native如何实现往服务器上传网络图片

本文链接: https://www.lsjlt.com/news/75055.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • react native如何实现往服务器上传网络图片
    这篇文章主要介绍了react native如何实现往服务器上传网络图片,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。如下所示:let&nbs...
    99+
    2022-10-19
  • java实现图片上传至服务器
    实现的思路:工具:MySQL,eclipse首先,在MySQL中创建了两个表,一个t_user表,用来存放用户名,密码等个人信息,一个t_touxiang表,用来存放上传的图片在服务器中的存放路径,以及图片名字和用户ID,T_touxian...
    99+
    2021-04-29
    java 实现 图片 上传 服务器
  • js实现上传图片到服务器
    本文实例为大家分享了js实现上传图片到服务器的具体代码,供大家参考,具体内容如下 HTML //多张图片上传multiple <input type="file" id...
    99+
    2022-11-12
  • js实现上传图片到服务器的
    这篇文章主要介绍了js实现上传图片到服务器的,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。具体内容如下HTML//多张图片上传multiple<input t...
    99+
    2023-06-14
  • React+ajax+java如何实现上传图片并预览功能
    小编给大家分享一下React+ajax+java如何实现上传图片并预览功能,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!之前有在网上找ajax上传图片的资料,大部...
    99+
    2023-06-08
  • 微信小程序如何实现上传图片到服务器
    这篇文章主要介绍了微信小程序如何实现上传图片到服务器,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。上传图片到服务器:1.先在前端写一个选择图...
    99+
    2022-10-19
  • 微信小程序如何实现上传图片到php服务器
    这篇文章将为大家详细讲解有关微信小程序如何实现上传图片到php服务器,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。js代码如下 submitPhoto(){ &...
    99+
    2022-10-19
  • Android 通过Base64上传图片到服务器实现实例
    Android 通过Base64上传图片到服务器之前做上传图片是采用HttpServlet上传,不过用了一下Base64上传图片后,感觉比HttpServlet方便很多,大家也可以跟着尝试一下。前台图片处理:(传Bitmap对象即可) pu...
    99+
    2023-05-31
    android base64 上传图片
  • Vue中实现图片上传,上传后的图片回显,存储图片到服务器 【使用对象存储OSS】
    文章目录 1 前提知识1.1 服务端签名后直传1.1.1 流程和源码解析1.1.2 实现步骤 1.2 Aliyun Spring Boot OSS 示例(接入微服务)1.2.1 简略说明1.2.2步骤 2、项目中实际...
    99+
    2023-08-24
    vue.js 服务器 javascript
  • 如何实现uploader秒传图片到服务器
    小编给大家分享一下如何实现uploader秒传图片到服务器,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!先看看效果图:页面中js...
    99+
    2022-10-19
  • Golang如何限制木马图片上传服务器的实例
    目录项目背景问题解决项目背景 自己开发了一个云对象存储服务,用于存储某个项目中所有的文件资源。 问题 在进行安全测试时,自己遇到了一个问题:无法限制木马病毒模拟的图片文件进行上传。看...
    99+
    2022-11-13
  • 发送ajax请求如何实现上传图片显示在网页上
    这篇“发送ajax请求如何实现上传图片显示在网页上”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看...
    99+
    2022-10-19
  • JavaKindEditor粘贴图片自动上传到服务器功能实现
    ​图片的复制无非有两种方法,一种是图片直接上传到服务器,另外一种转换成二进制流的base64码目前限chrome浏览器使用首先以um-editor的二进制流保存为例:打开umedit...
    99+
    2023-05-15
    KindEditor粘贴自动上传服务器 KindEditor粘贴自动上传
  • java如何实现文件切片上传服务器+断点续传
    这篇文章主要为大家展示了“java如何实现文件切片上传服务器+断点续传”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“java如何实现文件切片上传服务器+断点续传”这篇文章吧。1.定义一个实体类用...
    99+
    2023-06-22
  • html5中canvas移动浏览器上如何实现图片压缩上传
    这篇文章主要介绍html5中canvas移动浏览器上如何实现图片压缩上传,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!一、<input type="file"...
    99+
    2022-10-19
  • 微信小程序如何实现图片上传+服务端接收功能
    小编给大家分享一下微信小程序如何实现图片上传+服务端接收功能,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!这次介绍下小程序当中常...
    99+
    2022-10-19
  • 如何导出HTML5中Canvas图片并上传服务器功能
    小编给大家分享一下如何导出HTML5中Canvas图片并上传服务器功能,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!导出HTML5 Canvas图片,并上传服务器最近接触的项目中,经常遇到需要canvas绘制图片的需求,比...
    99+
    2023-06-09
  • Java KindEditor粘贴图片自动上传到服务器功能怎么实现
    这篇文章主要介绍了Java KindEditor粘贴图片自动上传到服务器功能怎么实现的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇Java KindEditor粘贴图片自动上传到服务器功能怎...
    99+
    2023-07-06
  • 微信小程序中如何实现图片选择、上传到服务器、预览功能
    这篇文章主要介绍了微信小程序中如何实现图片选择、上传到服务器、预览功能,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。小程序实现选择图片、预览...
    99+
    2022-10-19
  • layui如何上传图片到服务器的非项目目录下
    小编给大家分享一下layui如何上传图片到服务器的非项目目录下,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!1、layui没办法与form表单中的其他字段一同提交到后台,所以只能通过先提交...
    99+
    2022-10-19
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作