继续捣鼓毕设!
前两天将登陆和注册这些通用功能搞定后,现在需要解决从手机端上传图片到服务器的需求。先来一张目前登陆界面截图吧:
手机上传图片的功能主要有两方面:
- 客户端,phoneGap是否提供了接口可以让用户选择图片以及拍照上传。选择了图片后的上传方式又是如何。
- 服务器端,主要是接受客户端的请求,对图片信息进行验证和保存。
phoneGap
注意,下面的代码实例在android中运行正常,但是不同平台可能会有区别,具体应用中,请仔细阅读API后面对不同平台的Hack!!
好,回到主题!phoneGap这边主要分成两块内容
一、图片的获取
图片的获取主要靠API中的Camera对象
Camera
The camera object provides access to the device’s default camera application.
Camera对象提供了方法来调用系统默认的拍照程序。
Camera对象只有一个方法getPicture
,通过给定options,可以指定返回图片的base64编码字符串
或者图片的本地URI。
getPicture
1
|
|
cameraOptions
- quality: 保存的图片质量(个人觉得应该是指拍照的情况),数字,范围为:0-100
- destinationType: 选择返回的图片数据格式。
URI
或者是base64 encoded string
,这两个值定义如下:
1 2 3 4 |
|
- sourceType: 设置图片的来源,拍照或者从图库中寻找(但是实际有三种选项,
PHOTOLIBRARY
和SAVEDPHOTOALBUM
和区别不是很清楚哈~)
1 2 3 4 5 |
|
- allowEdit: 允许在图片被确认选择前进行简单的编辑
- EncodingType: 设置照片的格式(应该是针对拍照的情况)
1 2 3 4 |
|
- targetWidth: 设定图片的宽度
- targetHeight: 设定图片的高度
- MediaType: 设置可以选取的文件类型(可以是只有图片,只有视频,或者都可以),这个选项只有在
sourceType
不是Camera.PictureSourceType.CAMERA
才起作用
1 2 3 4 5 |
|
代码示例
1 2 3 4 5 6 7 8 9 10 11 12 13 |
|
注意下面设置返回为图片的URI,除此之外没有其他参数。图片URI大概是这个样子:
content://media/external/images/media/4
我们将这段URI
设置给img
元素的src
属性来实现本地图片,但是除此之外,貌似无法知道图片的具体格式,所以后面会涉及到后端nodejs的后端校验。
二、图片上传
上面介绍了如何让用户选取图片,下面介绍下文件的上传。
phoneGap中封装了对手机中的文件进行操作的一些常用方法。其中FileTransfer
对象允许你通过调用其实例对象的upload
方法将本地文件上传到服务器。
FileTransfer
使用HTTP multi-part POST
请求. 支持HTTP
和HTTPS
协议. 可以通过传递一个FileUploadOptions
对象到upload
方法,来设置上传相关的参数.
upload方法的具体使用直接看代码吧:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
|
接下来简单介绍FileUploadResult
和FileTransferError
FileUploadResult
Properties:
- bytesSent:总共传送到服务器的字节数
- responseCode:服务器返回的HTTP响应码
- response:服务其返回数据
fileTransferError
文件操作相关的方法出现的异常对象都是使用该对象。
Properties:
- code: 预先定义的错误代码.
预定义的代码有以下三种:
- FileTransferError.FILE_NOT_FOUND_ERR 文件未找到
- FileTransferError.INVALID_URL_ERR 非法的URL
- FileTransferError.CONNECTION_ERR 连接错误
OK!phoneGap这边主要就是上面两个方法,下一篇文章继续介绍nodejs这边的细节。