react native android 上传文件,Nodejs服务端获取上传的文件
React Native端
使用react-native-image-picker 做出选择图片的操作,选择完成后,直接将图片Post至服务器,保存在服务器的某个地方(保存图片的路径需要公开显示),并返回图片的URL地址,Android应用中,只保存图片的URL地址。
component中代码
_chooseImage() {
ImagePicker.showImagePicker(options, (response) => {
console.log('Response = ', response);
if (response.didCancel) {
console.log('用户取消了选择!');
}
else if (response.error) {
alert("ImagePicker发生错误:" + response.error);
}
else if (response.customButton) {
alert("自定义按钮点击:" + response.customButton);
}
else {
// let source = { uri: response.uri };
try {
console.log(response);
uploadImage(response.uri, response.fileName, this.state.userEntity.token).then((imageUrl) => {
console.log(imageUrl);
//http://f11.baidu.com/it/u=3806443343,4236894804&fm=72
// You can also display the image using data:
let source = { uri: 'data:image/jpeg;base64,' + response.data };
let oldselectIssueData = this.state.selectIssueData;
oldselectIssueData.IssueImageList.push({ uri: imageUrl });
console.log('设置后')
this.setState({
selectIssueData: oldselectIssueData
});
}).catch((err) => {
throw err;
})
} catch (error) {
Alert.alert('选择图片错误', error.message);
}
}
});
}
公共方法 uploadFile.js
import { default_API_url } from '../config/index';
export function uploadImage(imageUri, imageName, token) {
return new Promise((resolve, reject) => {
let data = new FormData()
if (imageUri) {
data.append('image', { uri: imageUri, name: imageName, type: 'image/jpg' })//加入图片
}
const config = {
method: 'POST',
headers: {
'Accept': 'application/json',
'Content-Type': 'multipart/form-data',
// 'Content-Language': React.NativeModules.RNI18n.locale,
'Authorization': token,
},
body: data,
}
fetch(default_API_url + '/fittingImage', config)
.then(function (response) {
return response.json();
}).then((responseData) => {
console.log('responseData', responseData);
if (responseData.resultType == 'SUCCESS') {
return resolve(default_API_url + '/' + responseData.results.imageName);//返回的是文件名,这里将它加入服务器的名称
} else {
return reject(responseData.resultMsg || 'Unknow Error');
}
}).catch((error) => {
return reject(error);
});
});
}
export default uploadImage;
Nodejs端,后端使用multer作为上传文件中间件,参考地址:http://cnodejs.org/topic/564f32631986c7df7e92b0db和https://dzone.com/articles/upload-files-or-images-to-server-using-nodejs
service.js中,增加
app.use(express.static(config.fittingImagePath));//公开某个文件夹
router中的方法:
exports.UploadFittingImage = (req, res) => {
try {
upload(req, res, function (err) {
if (err) {
return res.json({ url: err.message })
}
logger.info('req.files---------------------', req.files[0].filename)//因为支持的是多文件上传,这里我返回的是第一个文件名
return res.status(200).json(responseFormat(null, { imageName: req.files[0].filename }));
});
}
catch (error) {
return res.status(400).json(responseFormat(error, null));
}
};
公共方法fileUpload.js
import multer from 'multer';
import Config from 'config-lite';
let config = Config(__dirname); let Storage = multer.diskStorage({
destination: function (req, file, callback) {//文件保存位置,我这里是配置的
callback(null, "./" + config.fittingImagePath);
},
filename: function (req, file, callback) {//重命名文件
callback(null, file.fieldname + "_" + Date.now() + "_" + file.originalname);
}
}); let upload = multer({
storage: Storage
}).array("image", 1); //Field name and max count
//导出对象
module.exports = upload;
整体的流程

react native android 上传文件,Nodejs服务端获取上传的文件的更多相关文章
- springboot 服务端获取前端传过来的参数7种方式
下面为7种服务端获取前端传过来的参数的方法 1.直接把表单的参数写在Controller相应的方法的形参中,适用于GET 和 POST请求方式 这种方式不会校验请求里是否带参数,即下面的userna ...
- React Native Android启动白屏的一种解决方案上
我们用RN去开发Android应用的时候,我们会发现一个很明显的问题,这个问题就是启动时每次都会有1~3秒的白屏时间,直到项目加载出来 为什么会出现这个问题? RN开发的应用在启动时,首先会将js b ...
- Node.js:上传文件,服务端如何获取文件上传进度
内容概述 multer是常用的Express文件上传中间件.服务端如何获取文件上传的进度,是使用的过程中,很常见的一个问题.在SF上也有同学问了类似问题<nodejs multer有没有查看文件 ...
- Wince 6.0适用 .NET 使用HttpRequest的Post上传文件,服务端的Web API接收Post上传上来的文件 代码
//调用的示例 private string fileName = "InStorageData.csv"; string filePath = parentPath + Comm ...
- react-native —— 在Mac上配置React Native Android开发环境排坑总结
配置React Native Android开发环境总结 1.卸载Android Studio,在终端(terminal)执行以下命令: rm -Rf /Applications/Android\ S ...
- MVC文件上传04-使用客户端jQuery-File-Upload插件和服务端Backload组件实现多文件异步上传
本篇使用客户端jQuery-File-Upload插件和服务端Badkload组件实现多文件异步上传.MVC文件上传相关兄弟篇: MVC文件上传01-使用jquery异步上传并客户端验证类型和大小 ...
- MIME类型-服务端验证上传文件的类型
MIME的作用 : 使客户端软件,区分不同种类的数据,例如web浏览器就是通过MIME类型来判断文件是GIF图片,还是可打印的PostScript文件. web服务器使用MIME来说明发送数据的种类, ...
- 【2017-05-30】WebForm文件上传。从服务端删除文件
用 FileUpload控件进行上传文件. <asp:FileUpload ID="FileUpload1" runat="server" /> ...
- asp.net上传Excel文件到服务端进行读取
1.我们IIS是使用7.5,由于在网站中上传Excel文件到服务端进行数据读取时候出现读取失败情况.一开始以为是没有按照office软件问题,其实不然,因为server是64位操作系统,如果我们要使用 ...
随机推荐
- Hbase万亿级存储性能优化总结
背景 hbase主集群在生产环境已稳定运行有1年半时间,最大的单表region数已达7200多个,每天新增入库量就有百亿条,对hbase的认识经历了懵懂到熟的过程.为了应对业务数据的压力,hbase入 ...
- Web Service快速入门
一言以蔽之:WebService是一种跨编程语言和跨操作系统平台的远程调用技术. 那么它是如何做到这种跨语言,跨平台之间的调用呢? 其实它是以一个xml文件以及webservice这种服务来实现跨平台 ...
- LightOJ 1135 - Count the Multiples of 3 线段树
http://www.lightoj.com/volume_showproblem.php?problem=1135 题意:给定两个操作,一个对区间所有元素加1,一个询问区间能被3整除的数有多少个. ...
- vue-route-transition路由前进后退动画
vue-route-transition vue router 切换动画 特性 模拟前进后退动画 基于css3流畅动画 基于sessionStorage,页面刷新不影响路由记录 路由懒加载,返回可记录 ...
- 【BZOJ1038】【ZJOI2008】瞭望塔 [模拟退火]
瞭望塔 Time Limit: 10 Sec Memory Limit: 162 MB[Submit][Status][Discuss] Description 致力于建设全国示范和谐小村庄的H村村 ...
- java===java基础学习(3)---数据类型转换,运算符级别,枚举类型
数据类型转换: 有的时候,程序需要将数据类型,比如 int + float ,结果是float, 这里的int就被转换为float类型,属于合法转换. Java中的合法转换如下图: 红色表示无信息丢失 ...
- 安装sysstat出现软件包依赖问题
需要使用Linux性能分析工具iostat 和sar等, 这就需要安装软件包sysstat 在Ubuntu 12.04下运行sudo apt-get install sysstat,出现如下问题: 开 ...
- leetcode 136 137 Single Number
题目描述(面试常考题) 借助了异或的思想 class Solution { public: int singleNumber(vector<int>& nums) { ; ; i ...
- Mysql 数据库学习笔记04 函数
一.创建自定义函数 * 使用自定义函数,可以返回字符串.整型.实数或者其他类型: create [aggregate] function 名称 (参数列表) return type begin //函 ...
- spring mvc3+默认首页设置问题
web.xml配置: <servlet-mapping> <servlet-name>dispatcher</servlet-name> <url-patte ...