1
clanned 2015-03-26 09:16:58 +08:00
用http post,图片二进制做base64编码,其他参数同等的post参数,服务器解析base64再存图片就行了
|
2
vagrant OP @xdtianyu 这样需要服务器也做base64解码,关键是现在服务器已写好,只提供了一个api 要求post图片过去,同时需要传递一个String类型的参数过去。
|
4
vagrant OP @xdtianyu 所以我的问题是在服务器api写好的情况下, 怎么post图片和字段过去,因为是别人写的服务器端api, 只给了api地址和可传的字段的描述
|
5
liangzhitao 2015-03-26 09:52:23 +08:00
我们是用的七牛,你看下七牛的具体怎么实现的。
|
6
qiayue 2015-03-26 09:53:59 +08:00
multipart
这样后端不仅能接收你客户端的上传,也能接收网页的表单图片上传 |
8
vagrant OP @liangzhitao 这个好像没什么关系吧?
|
9
kirisetsz 2015-03-26 10:01:56 +08:00 via Android
用 Spring 的话有 HttpEntity 对象可以用来构造实体…
Retrofit 干脆什么都不用配置在 Interface 方法上加注 multipart 标签就好了。 手工构造一定是姿势不对咯 ('・ω・') 不过手工构造可读性也不错呢… 只是强迫症无法接受… |
10
vagrant OP @kirisetsz 请问下你说的HttpEntity大概是怎么实现的? 还有你上传图片都是怎么实现的呢? 不胜感激。纠结这问题很久了。
|
11
finian 2015-03-26 12:29:53 +08:00 1
看了你前面的回复,既然「关键是现在服务器已写好」,那就按服务器提供的 API 传,你说一下那个传图片的 API 具体长啥样
|
12
vagrant OP @finian
http://****/upload POST请求 字段 类型 描述 备注 值条件 method String 上传头像的方法 logo 必填 这种形式 需要传图片过去,也需要弄个字段。没做过图片上传,请问 怎么做? |
14
finian 2015-03-26 12:48:54 +08:00
@vagrant 你们这 API 压根就没描述怎么传图片数据啊,请求体是用 multipart/form-data 呢还是 application/x-www-form-urlencoded 呢还是其他什么鬼,不写清楚让客户端怎么传。。。所以你还是先去问清楚这个 API 是以什么格式传的数据吧
|
16
clanned 2015-03-26 12:53:54 +08:00
@vagrant 点错感谢了
你那个api接口还是api的描述啊,要是服务端给你的接口你就去找服务端把详细的接收参数拿出来,具体post的是什么,“字段 类型 描述 备注 值条件”这些具体是什么字符难不成直接中文。图片上传是什么另类?post请求就是post请求,http传递的到底也就是字节流。Bitmap转到byte[]作为参数传出去。 |
18
finian 2015-03-26 13:05:08 +08:00
@qiayue 嗯,所以这个 API 描述就有问题,默认是 multipart/form-data 的话,还要指定接收图片的 name 字段、具体的图片数据的编码格式,这些信息都不知道的话客户端根本就没法调用
|
19
vagrant OP @qiayue 我想知道的是怎么写过去 用HttpURLConnection写在流中? 还是用HttpClient? 还是怎么弄?
|
20
finian 2015-03-26 13:08:20 +08:00
@vagrant 。。。那你就说是什么格式的吧,按照这种格式去 post 数据就行,Android 很多网络库都有封装好的方法直接调用就行
|
21
finian 2015-03-26 13:13:47 +08:00
@vagrant 这样吧,你先说清楚请求体的 Content-Type 究竟是什么类型?multipart/form-data 还是 application/x-www-form-urlencoded 还是你们自定义的格式
|
22
vagrant OP @finian multipart/form-data 我想知道怎么传过去,一般参数的api地址的Content-Type是 application/x-www-form-urlencoded直接写入得到的输出流就可以了, 但是我不知道对于multipart/form-data 怎么同时弄图片和参数?
|
23
finian 2015-03-26 13:27:17 +08:00
@vagrant 如果是 multipart/form-data 的话,那你的请求体就是类似这样的:
... Content-Type: multipart/form-data; boundary=xxx --xxx Content-Disposition: form-data; name="foo" bar --xxx Content-Disposition: form-data; name="pic" Content-Type: application/octet-stream <图片二进制数据> --xxx-- 所以你传图片数据(还有额外参数)时,按照 multipart/form-data 的格式构造请求体 post 过去就行。建议你用开源库,比如 OkHttp 之类的,构造请求体的方法都是封装好的 |