titanium 图片上传(多图上传)
发表于:,更新于:,By Sally
大纲
android 和 ios 实现多图片上传
首先,要能够多选图片,使用这个 TiMediaPicker
- 具体的操作,参考里面的example
接着,在ios端,直接就可以得到图片的Blob信息,进行上传,一切ok
而在android端,得到的却是图片的路径(有缩略图路径,也有原始图片的路径),缩略图用来进行预览,原始图片进行上传。这里有一个大坑。。。
- 因为在android端,只能获得图片的路径,所以就需要通过
Ti.Filesystem.getFile('file://'+item.url).read()
来获得图片的对象吧(也许描述不准确,但是可以上传就是了)
- 然后理所当然的通过post传递参数,进行上传,但是。。。
1 | Parameters: {"content\r\nContent-Type: "=>"908908", "decorating_case_stage_id\r\nContent-Type: "=>"2", "file2"=>#<ActionDispatch::Http::UploadedFile:0x007f857a1cc760 @tempfile=#<Tempfile:/var/folders/1m/fz3bl8md2_d__gjwwgs_0fd80000gn/T/RackMultipart20151210-82452-123y7l7>, @original_filename="tixhr-46658484.jpeg", @content_type="image/jpeg", @headers="Content-Disposition: form-data; name=\"file2\"; filename=\"tixhr-46658484.jpeg\"\r\nContent-Type: image/jpeg\r\nContent-Transfer-Encoding: binary\r\n">, "current_day\r\nContent-Type: "=>"2015-12-10", "images_count\r\nContent-Type: "=>"2", "decoratingcase_id\r\nContent-Type: "=>"11", "file1"=>#<ActionDispatch::Http::UploadedFile:0x007f857a1cc350 @tempfile=#<Tempfile:/var/folders/1m/fz3bl8md2_d__gjwwgs_0fd80000gn/T/RackMultipart20151210-82452-1d01zys>, @original_filename="tixhr722178397.jpeg", @content_type="image/jpeg", @headers="Content-Disposition: form-data; name=\"file1\"; filename=\"tixhr722178397.jpeg\"\r\nContent-Type: image/jpeg\r\nContent-Transfer-Encoding: binary\r\n">} |
- 如上所示,android端传递的参数,莫名其妙的都给每个key值添加了一个
\r\nContent-Type :
这样的鬼东西,而ios就比较正常,效果如下所示
1 | Parameters: {"content"=>"asdfasdf", "file2"=>"file:///storage/emulated/0/DCIM/.thumbnails/1448853745499.jpg", "decorating_case_stage_id"=>"2", "images_count"=>"2", "current_day"=>"2015-12-10", "file1"=>"file:///storage/emulated/0/DCIM/.thumbnails/1448276319474.jpg", "decoratingcase_id"=>"11"} |
那问题出现了,解决问题的办法呢,就是手动的替换参数的key值
这里仍需注意一个问题:params是一个大hash,hash在遍历的过程中不可以修改自身,所以此处需要一个
clone
方法
1 | # 对每个key都进行处理,去掉其中没用的部分,例如:"content\r\nContent-Type: "=>"1212" |
- 参数的key修改好之后,一切处理就顺畅了。就等着后台做上传图片处理了。方法见之前的上传图片到服务器和upyun。