当前位置:首页 » 文件管理 » okhttp大文件上传

okhttp大文件上传

发布时间: 2023-05-17 03:47:59

Ⅰ Android 使用OkhttpUtils上传图片

IMAGE_FILE_NAME这个确定是文件路径么?
那个其他我看不出来,我上传图片用的都是Xutils,你可以搜搜试试。

Ⅱ android 怎么多图上传 okhttp

android上传图片是先将图片文件转换成流文件:可用以下代码转换流文件,imgPath为图片的完整地址
//图片转化成base64字符串
public static String imgToBase64(String imgPath) {
InputStream in = null;
byte[] data = null;
//读取图片字节数组
try {
in = new FileInputStream(imgPath);
data = new byte[in.available()];
in.read(data);
in.close();
}
catch (IOException e){
e.printStackTrace();
}
//对字节数组Base64编码
sun.misc.BASE64Encoder encoder = new BASE64Encoder();
return encoder.encode(data);//返回Base64编码过的字节数组字符串
}
然后图片文件就成为一串字符串啦,传递方法和普通字符串一样,多图使用分号隔开即可,后台收到后直接将流文件转换成图片保存即可。

Ⅲ OKHttp使用详解

OkHttp 是一个默认高效的 HTTP 客户端:

在使用 OkHttp 发送 HTTP 请求时,首先需要获取一个 OkHttpClient 对象,获取 OkHttpClient 对象的方式很简单,在 OkHttp 中大量使用了 Builder 模式。获取 OkHttpClient 对象的方法如下所示:

GET 请求的执行步骤如下:

POST 请求的构建步骤与 GET 相似,区别是,在构建 Request 对象基基时 在 post() 方法中,设置需轿蔽要发送的数据,发送的数据可为目前流行的 JSON 格式数据,也可以模拟 Form 表单提交的数据,操作如下所示:

构建完 Request 对象后的步骤,就与 GET 请求相似,构建 Call 对象然后,在发送 同步 或 异步 请求

在 OkHttp 中 进行文件的上传,是相当简单的,在发送 POST 请求时,只需要构造一个 MultipartBody 对象即可, MultipartBody 对象可以发送 文件数据,也可以发搏帆谨送基本类型的数据。

OkHttp 作为网络请求工具,简单且功能强大,并且其大量使用了 构建者模式。

Ⅳ Android Q 上基于 OkHttp 上传(大)文件的实现

如图,RequestBody 有好几个 create 方法,可以满足不同场景下的内容上传,比如字符串、字节数组和文件。

显然,字符串和字节数组是不能上传大文件的,均可能 OOM。

那么,就只能使用 RequestBody create(MediaType contentType, File file) 方法了。正常情况下也是没什么问题的,但是在 Android Q 上,由于存储权限的变更,将导致无法直接访问从内容库所选择的文件。

得到如下日志:

可见,即使通过 uri 得到了文件的真实路径,也是无法直接访问的。

通过上面的实验可以看到,我们是无法直接通过 File 相关的 API 访问原始文件的,但是我们却可以通过 ContentResolver 得到原始文件的流。

类似地,可以基于流或者 FileDescriptor 对图片解码成 Bitmap,参考:

Ⅳ okhttp 怎么管理 cookie

OkHttp和HttpURLConnection一样, 是面向java的, 而且是做socket层的事情的, 使用时要在子线程调用, 通过handler发送结果到主线程. 而NoHttp和Volley不是做socket层的东西. 直接在主线程就可以调用, 拿到结果后直接更新UI, 不需要用handler去发送, 很简单.
不过我推荐使用NoHttp. 原因是NoHttp封装了: 文件下载, 断点续传, 304缓存, 302/303传参数, 传文件, 请求头, 多文件上传, 大文件上传, Cookie自动管理等多种功能, 这些是Volley而没有, 使用Volley时这些功能要我们去写蛮多代码来再次封装.

而且Volley用的HttpClient来解析的, Android6.0删除了HttpClient后, 我们在6.0下也不能使用Volley的源码了, 所以还是用NoHttp吧, NoHttp兼容2.0-6.0以上

而使用OkHttp还需要我们自己去封装, 而且Android4.4之后NoHttp也是使用OkHttp做底层的.

Ⅵ Okhttp 使用(同步、异步/get、post/上传文件)

目前Android端调用网络请求最常用的框架就是OKHttp,目前项目中也经常会用到。OKHTTP有哪些特点呢?下面是官网给出的OKHTTP的特点:

官网地址: https://square.github.io/okhttp/
想要详细了解HTTP/2,可以参考: https://www.jianshu.com/p/828a29bced9f

接下来就可以愉快的开始使用OKhttp进行开发了。

OKhttpclient通过builder构建,构建的时候涉及到很多配置项,本次简单对其中一些配置项做了说明,后续会对一些重要的配置项做专题说明正察。在实际的项目中的配置项根据项目具体需求进行配置。

上述配置项中比较常用的有

同步get请求会阻塞当前线程直到返回举枝茄结果,请求大致分为四个步骤:

异步请求方式的步骤和上述前两个步骤基本搭拍一致,主要发起请求的方式发生了变化,结果通过回调返回。这种请求方式对请求的线程没有限制。

与get请求方式不同的是post请求需要构建RequestBody,在请求时携带RequestBody。

Ⅶ okhttp 上传文件socket关闭怎么解决

使用okhttp上传文件时,每次上传超过5M的文件就会失败, java.net.SocketException: sendto failed: EPIPE (Broken pipe)

原因是okhttp的请求头RequestBody出现了问题

原袜坦代码:

RequestBody requestBody = new MultipartBody.Builder().setType(MultipartBody.FORM)
.addFormDataPart("file", file.getName(), RequestBody.create(null, file))
.addFormDataPart("filekey", fileKey)
.addFormDataPart("isSend", "true")
.addPart(Headers.of("Content-Disposition", "告凳桐form-data; name=\"another\粗陵";filename=" + file.getName() + "")

,RequestBody.create(MediaType.parse("application/octet-stream"), file))
.build();

改正后的代码,删除了addPart
RequestBody requestBody = new MultipartBody.Builder().setType(MultipartBody.FORM)
.addFormDataPart("file", file.getName(), RequestBody.create(null, file))
.addFormDataPart("filekey", fileKey)
.addFormDataPart("isSend", "true")
.build();

Ⅷ okhttp的对象如何传参

1 okhttp的对象可以通过Builder模式进枣判行传参凳段改。

2 Builder模式可以传入请求的URL、请求类型、请求体、请求头等参数,同时也可以对超时时间、重定向、缓存策略等燃埋进行配置。

3 如果需要上传文件或者流,可以通过RequestBody类进行封装,在Builder中传入RequestBody对象即可。

延伸:在实际开发中,通过Builder模式进行配置和传参可以提高灵活性和可维护性,将参数进行封装,可以避免参数传递不当导致的问题,同时也可方便进行单元测试。

Ⅸ okhttp最大支持上传多大的文件

/**
* 上传文件
* @param actionUrl 连接地址
* @param paramsMap 参数
* @param callback 回调
* @param <T>
*/
public static <T>void upLoadFile(String actionUrl, HashMap<String, Object> paramsMap, Callback callback) {

// RequestBody requestBody = new MultipartBuilder() //建立请求的内容
// .type(MultipartBuilder.FORM)//表单形式
// .addFormDataPart("token", token)//携带的参数
// .addFormDataPart("file", file.getName(), RequestBody.create(null, file))//第一个参数是服务器接收的名称,第二个是上传文件的名字,第三个是上传的文件
// .build();
// Request request = new Request.Builder()//建立请求
// .url(url)//请求的地址
// .post(requestBody)//请求的内容(上面建立的requestBody)
// .build();

try {
OkHttpClient okHttpClient = new OkHttpClient();
MultipartBuilder builder = new MultipartBuilder();
builder.type(MultipartBuilder.FORM);
//追加参数
for (String key : paramsMap.keySet()) {
Object object = paramsMap.get(key);
if (!(object instanceof File)) {
builder.addFormDataPart(key, object.toString());
} else {
File file = (File) object;
builder.addFormDataPart(key, file.getName(), RequestBody.create(null, file));
}
}
//创建RequestBody
RequestBody body = builder.build();
//创建Request
final Request request = new Request.Builder().url(actionUrl).post(body).build();
HLog.v("upLoadFile","upLoadFile",request.urlString());
Call call=okHttpClient.newCall(request);
call.enqueue(callback);
} catch (Exception e) {
Log.e(TAG, e.toString());
}
}

Ⅹ Okhttp上传文件(视频并携带参数)

之前我在csdn上写过一枝滚篇okhttp上传图片头像的参数解释:
https://blog.csdn.net/Hu_wenpeng/article/details/105492603

是这样写的 因为网络请求 还是retrofit+okhttp
所以请兆搭咐求方法定义成下面这样:

在这里总结一下 只要和服务能够通信成功 说明我们写的方式是没有错的,无法是一些参数的问题,不要一看返回非200 就认为自族纯己写的方式有问题

热点内容
华为8加128配置有哪些 发布:2025-02-11 15:48:20 浏览:579
压缩机三转子 发布:2025-02-11 15:45:54 浏览:827
linux操作系统shell 发布:2025-02-11 15:45:53 浏览:338
安卓模拟器如何选择安装 发布:2025-02-11 15:34:26 浏览:176
安卓手机和华为哪个好用 发布:2025-02-11 15:32:11 浏览:555
大众车载dv设置密码多少 发布:2025-02-11 15:26:06 浏览:413
sqlserver连接超时 发布:2025-02-11 15:24:25 浏览:741
求三端类引擎可编译的源码 发布:2025-02-11 15:20:01 浏览:467
sql2000质疑 发布:2025-02-11 14:52:21 浏览:521
se94se页面访问升级版 发布:2025-02-11 14:49:42 浏览:805