[英]How to upload file with Okhttp3 (REST API)
我正在尝试通过上传 Google Photos API 字节来上传图片。
所以这是我对 OkHttp3 的要求:
Request request = new Request.Builder()
.addHeader("Authorization", "Bearer " + token)
.addHeader("Content-type:", "application/octet-stream")
.addHeader("X-Goog-Upload-Content-Type:",mimeType)
.addHeader("X-Goog-Upload-Protocol:", "raw")
.url("https://photoslibrary.googleapis.com/v1/uploads")
.post(requestBody) // how to build request body?
.build();
文档说:“在请求正文中,包含文件的二进制文件:”
媒体二进制数据
这是什么意思?
对于给定的文件,我假设它是:
byte[] data = FileUtils.readFileToByteArray(new File(myPath));
但是如何用数据数组构建这个 requestBody 呢?
编辑我已经尝试过:
MediaType mType = MediaType.parse("application/octet-stream; charset=utf-8");
RequestBody requestBody = RequestBody.create(mType,new File(path));
例外:
okhttp3.internal.http2.StreamResetException:stream 已重置:PROTOCOL_ERROR
提前感谢您让我走上正轨!
RequestBody
有一些重载的工厂方法:
看起来您在任何一种情况下都正确地提供了第二个参数。
至于MediaType
参数,我通常使用底层图像的 MIME 类型,而不是指定一般的二进制内容,例如:
MediaType.parse("image/jpeg")
or
MediaType.parse("image/png")
...
不幸的是,我在参数键之后留下了“:”!!!!
Request request = new Request.Builder()
.addHeader("Authorization", "Bearer " + token)
.addHeader("Content-type", "application/octet-stream")// and no X-Goog-Upload-Content-Type :
.addHeader("X-Goog-Upload-Content-Type",mimeType)//same
.addHeader("X-Goog-Upload-Protocol", "raw")//same
.url("https://photoslibrary.googleapis.com/v1/uploads")
.post(requestBody)
.build();
对于 requestBody:
byte [] data = FileUtils.readFileToByteArray(file);
RequestBody requestBody = RequestBody.create(mimeTypeOfFile,data);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.