时间:2021-05-20
前言:现在大多数的项目中都涉及图片+文字上传了,下面请详见实现原理:
开发环境:AndroidStudio
1.引入依赖:
compile 'com.squareup.retrofit2:retrofit:2.1.0'
2.网络权限:
<uses-permission android:name="android.permission.INTERNET" />
3.创建上传对象OkHttpClient :
private static final OkHttpClient client = new OkHttpClient.Builder() .addInterceptor(new Interceptor() { @Override public Response intercept(Chain chain) throws IOException { Request request = chain .request() .newBuilder() .build(); return chain.proceed(request); } }) .readTimeout(10, TimeUnit.SECONDS)//设置读取超时时间 .writeTimeout(10, TimeUnit.SECONDS)//设置写的超时时间 .connectTimeout(15, TimeUnit.SECONDS)//设置连接超时时间 .build();4.上传图片的公有方法:
private synchronized final static void uploadImgAndParameter(Map<String, Object> map, String url, final UIDataListener listener) { // mImgUrls为存放图片的url集合 MultipartBody.Builder builder = new MultipartBody.Builder().setType(MultipartBody.FORM); if (null != map) { for (Map.Entry<String, Object> entry : map.entrySet()) { if (entry.getValue() != null) { if (entry.getValue() instanceof File) { File f = (File) entry.getValue(); builder.addFormDataPart(entry.getKey(), f.getName(), RequestBody.create(MEDIA_TYPE_PNG, f)); } else { builder.addFormDataPart(entry.getKey(), entry.getValue().toString()); } } } } //创建RequestBody RequestBody body = builder.build();// MultipartBody requestBody = builder.build(); //构建Request请求 final Request request = new Request.Builder() .url(url)//地址 .post(body)//添加请求体// .post(requestBody)//添加请求体 .build(); client.newCall(request).enqueue(new okhttp3.Callback() { @Override public void onResponse(Call call, final Response response) throws IOException { if (response.isSuccessful()) {//判断是否成功 final String data = response.body().string();//string()仅可调用一次。否则报IllegalStateException: closed异常 Log.i("file1", "上传照片成功-->" + data); onSuccess(listener, data); call.cancel();//上传成功取消请求释放内存 } } @Override public void onFailure(Call call, final IOException e) { Log.i("file2", "上传失败-->" + e.getMessage()); String msg = e.getMessage(); if (msg == null || msg.equals("timeout")) { onError(listener, "网络不稳定请求超时!"); } else { onError(listener, e.getMessage()); } call.cancel();//上传失败取消请求释放内存 } }); }//注意:添加手机图片,别忘了添加SD卡权限
5.全部代码:
public class HttpUtil { private static final Handler handler = new Handler(Looper.getMainLooper()); private static final MediaType MEDIA_TYPE_PNG = MediaType.parse("image/*"); private static final OkHttpClient client = new OkHttpClient.Builder() .addInterceptor(new Interceptor() { @Override public Response intercept(Chain chain) throws IOException { Request request = chain .request() .newBuilder() .build(); return chain.proceed(request); } }) .readTimeout(10, TimeUnit.SECONDS)//设置读取超时时间 .writeTimeout(10, TimeUnit.SECONDS)//设置写的超时时间 .connectTimeout(15, TimeUnit.SECONDS)//设置连接超时时间 .build(); /** * 实例--》添加商品 */ public static void addCoupon( int shopperId,String shopperName, File file, final UIDataListener listener) { String url = "shopappajx/shopAppCouponAction_saveCoupon.htm"; Map<String, Object> map = new HashMap<>(); map.put("shopperId", shopperId); map.put("shopperName", shopperName); map.put("couponImage", file);//商品图片 uploadImgAndParameter(map, url, listener); } //上传图片共有方法 private synchronized final static void uploadImgAndParameter(Map<String, Object> map, String url, final UIDataListener listener) { // mImgUrls为存放图片的url集合 MultipartBody.Builder builder = new MultipartBody.Builder().setType(MultipartBody.FORM); if (null != map) { for (Map.Entry<String, Object> entry : map.entrySet()) { if (entry.getValue() != null) { if (entry.getValue() instanceof File) { File f = (File) entry.getValue(); builder.addFormDataPart(entry.getKey(), f.getName(), RequestBody.create(MEDIA_TYPE_PNG, f)); } else { builder.addFormDataPart(entry.getKey(), entry.getValue().toString()); } } } } //创建RequestBody RequestBody body = builder.build();// MultipartBody requestBody = builder.build(); //构建Request请求 final Request request = new Request.Builder() .url(url)//地址 .post(body)//添加请求体// .post(requestBody)//添加请求体 .build(); client.newCall(request).enqueue(new okhttp3.Callback() { @Override public void onResponse(Call call, final Response response) throws IOException { if (response.isSuccessful()) {//判断是否成功 final String data = response.body().string();//string()仅可调用一次。否则报IllegalStateException: closed异常 Log.i("file1", "上传照片成功-->" + data); onSuccess(listener, data); call.cancel();//上传成功取消请求释放内存 } } @Override public void onFailure(Call call, final IOException e) { Log.i("file2", "上传失败-->" + e.getMessage()); String msg = e.getMessage(); if (msg == null || msg.equals("timeout")) { onError(listener, "网络不稳定请求超时!"); } else { onError(listener, e.getMessage()); } call.cancel();//上传失败取消请求释放内存 } }); } private final static void onSuccess(final UIDataListener listener, final String data) { handler.post(new Runnable() { public void run() { // 需要在主线程的操作。 listener.onSuccess(data); } }); } private final static void onError(final UIDataListener listener, final String msg) { if (null != listener) { handler.post(new Runnable() { public void run() { // 需要在主线程的操作。 listener.onFailure(msg); } }); } } public interface UIDataListener { //网络请求成功 void onSuccess(String data); //网络请求失败 void onFailure(String errorMassage); }}以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,同时也希望多多支持!
声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。
Android仿照微信发说说,既能实现拍照,选图库,多图案上传,使用Retrofit技术。使用方法:详见项目的运行效果:服务器端接收文件的actionUploa
定时备份文件并FTP上传至备份服务器复制代码代码如下:@echooffcolor0ftitle定时备份文件并FTP上传至备份服务器rem要备份的文件夹echo:
当向服务器上传图像时,根据服务器操作的复杂性和服务器性能,需要几秒钟到几分钟的时间来完成。本文的重点是在图像上传至服务器时使用JavaScript立即显示图像。
本文实例为大家分享了Java实现文件上传服务器和客户端的具体代码,供大家参考,具体内容如下文件上传服务器端:/***使用TCP协议实现上传功能的服务器端*思路:
电脑怎么换ipip代理服务器设置图文教程电脑怎么换ipip代理服务器设置图文教程电脑怎么换ipip代理服务器设置图文教程电脑怎么换ipip代理服务器设置图文教程