android 上传图片或文件都是怎么弄的?

2015-03-26 08:51:08 +08:00
 vagrant
我google到的方法: 1.自己构造multipary 2.使用MultipartyEntity. 3.第三方开源库如android-aync-http

我想请问下,各位实际上怎么向服务器传图片的? 如果上传图片的同时增加图片描述之类的字段呢?
4216 次点击
所在节点    问与答
23 条回复
clanned
2015-03-26 09:16:58 +08:00
用http post,图片二进制做base64编码,其他参数同等的post参数,服务器解析base64再存图片就行了
vagrant
2015-03-26 09:35:24 +08:00
@xdtianyu 这样需要服务器也做base64解码,关键是现在服务器已写好,只提供了一个api 要求post图片过去,同时需要传递一个String类型的参数过去。
clanned
2015-03-26 09:37:36 +08:00
@vagrant 服务器既然已经写好就按照写服务的人要求的规范来上传啊,他要是没有测试过就开放接口出来就是服务端的问题了。
vagrant
2015-03-26 09:48:57 +08:00
@xdtianyu 所以我的问题是在服务器api写好的情况下, 怎么post图片和字段过去,因为是别人写的服务器端api, 只给了api地址和可传的字段的描述
liangzhitao
2015-03-26 09:52:23 +08:00
我们是用的七牛,你看下七牛的具体怎么实现的。
qiayue
2015-03-26 09:53:59 +08:00
multipart
这样后端不仅能接收你客户端的上传,也能接收网页的表单图片上传
vagrant
2015-03-26 09:55:09 +08:00
@qiayue 自己构造那一堆参数吗?如果同时需要传图片和字段呢?
vagrant
2015-03-26 09:56:26 +08:00
@liangzhitao 这个好像没什么关系吧?
kirisetsz
2015-03-26 10:01:56 +08:00
用 Spring 的话有 HttpEntity 对象可以用来构造实体…
Retrofit 干脆什么都不用配置在 Interface 方法上加注 multipart 标签就好了。
手工构造一定是姿势不对咯 ('・ω・') 不过手工构造可读性也不错呢… 只是强迫症无法接受…
vagrant
2015-03-26 10:14:31 +08:00
@kirisetsz 请问下你说的HttpEntity大概是怎么实现的? 还有你上传图片都是怎么实现的呢? 不胜感激。纠结这问题很久了。
finian
2015-03-26 12:29:53 +08:00
看了你前面的回复,既然「关键是现在服务器已写好」,那就按服务器提供的 API 传,你说一下那个传图片的 API 具体长啥样
vagrant
2015-03-26 12:38:18 +08:00
@finian

http://****/upload POST请求
字段 类型 描述 备注 值条件
method String 上传头像的方法 logo 必填

这种形式 需要传图片过去,也需要弄个字段。没做过图片上传,请问 怎么做?
vagrant
2015-03-26 12:40:46 +08:00
@finian 而我得到的图片是一个Bitmap
finian
2015-03-26 12:48:54 +08:00
@vagrant 你们这 API 压根就没描述怎么传图片数据啊,请求体是用 multipart/form-data 呢还是 application/x-www-form-urlencoded 呢还是其他什么鬼,不写清楚让客户端怎么传。。。所以你还是先去问清楚这个 API 是以什么格式传的数据吧
qiayue
2015-03-26 12:51:18 +08:00
@finian 没写的话,我怀疑默认是 multipart/form-data
clanned
2015-03-26 12:53:54 +08:00
@vagrant 点错感谢了

你那个api接口还是api的描述啊,要是服务端给你的接口你就去找服务端把详细的接收参数拿出来,具体post的是什么,“字段 类型 描述 备注 值条件”这些具体是什么字符难不成直接中文。图片上传是什么另类?post请求就是post请求,http传递的到底也就是字节流。Bitmap转到byte[]作为参数传出去。
vagrant
2015-03-26 13:00:52 +08:00
@finian 格式不重要 我这边知道 我想知道的是 post过去的方法?
finian
2015-03-26 13:05:08 +08:00
@qiayue 嗯,所以这个 API 描述就有问题,默认是 multipart/form-data 的话,还要指定接收图片的 name 字段、具体的图片数据的编码格式,这些信息都不知道的话客户端根本就没法调用
vagrant
2015-03-26 13:07:00 +08:00
@qiayue 我想知道的是怎么写过去 用HttpURLConnection写在流中? 还是用HttpClient? 还是怎么弄?
finian
2015-03-26 13:08:20 +08:00
@vagrant 。。。那你就说是什么格式的吧,按照这种格式去 post 数据就行,Android 很多网络库都有封装好的方法直接调用就行

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/179401

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX