iis服务器助手广告广告
返回顶部
首页 > 资讯 > 服务器 >Android中怎么利用OkHttp上传文件到服务器
  • 936
分享到

Android中怎么利用OkHttp上传文件到服务器

okhttpandroid服务器 2023-05-31 00:05:47 936人浏览 泡泡鱼
摘要

Android中怎么利用OkHttp上传文件到服务器,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。一、编写服务器端在上一讲服务器下新建UploadFileServlet,代

Android中怎么利用OkHttp上传文件到服务器,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。

一、编写服务器端

在上一讲服务器下新建UploadFileServlet,代码如下:然后重启服务器!

@WEBServlet("/UploadFileServlet")@MultipartConfigpublic class UploadFileServlet extends httpservlet {  private static final long serialVersionUID = 1L;  public UploadFileServlet() {    super();    // TODO Auto-generated constructor stub  }    protected void doGet(HttpServletRequest request, HttpServletResponse response)      throws ServletException, IOException {    this.doPost(request, response);  }    protected void doPost(HttpServletRequest request, HttpServletResponse response)      throws ServletException, IOException {    System.out.println("doPost==");    request.setCharacterEncoding("utf-8");    //获取file命名的part,注意要与Android端一样    Part part = request.getPart("file");    // 获取请求头,请求头的格式:fORM-data; name="file"; filename="snmp4j--api.zip"    String header = part.getHeader("content-disposition");    System.out.println(header);    String fileName = getFileName(header);    // 存储路径    String savePath = "D:/huang/upload";    // 把文件写到指定路径    part.write(savePath + File.separator + fileName);    response.setCharacterEncoding("UTF-8");    PrintWriter writer = response.getWriter();    writer.print("上传成功");  }  public String getFileName(String header) {        String[] tempArr1 = header.split(";");        String[] tempArr2 = tempArr1[2].split("=");    // 获取文件名,兼容各种浏览器的写法    String fileName = tempArr2[1].substring(tempArr2[1].lastIndexOf("\\") + 1).replaceAll("\"", "");    return fileName;  }}

二、Android端

布局,上一讲activity_main代码中添加 :

 <Button    android:id="@+id/ok_post_file"    android:layout_width="match_parent"    android:layout_height="wrap_content"    android:text="上传文件" />  <TextView    android:id="@+id/post_text"    android:layout_width="match_parent"    android:layout_height="wrap_content"    android:gravity="center"    android:text="0" />  <ProgressBar    android:id="@+id/post_progress"        android:layout_width="match_parent"    android:layout_height="wrap_content"    android:max="100" />

OkHttpUtil新增上传文件方法:

 public static void postFile(String url, final ProgressListener listener, Callback callback, File...files){    MultipartBody.Builder builder = new MultipartBody.Builder();    builder.setType(MultipartBody.FORM);    Log.i("huang","files[0].getName()=="+files[0].getName());    //第一个参数要与Servlet中的一致    builder.addFormDataPart("file",files[0].getName(), RequestBody.create(MediaType.parse("application/octet-stream"),files[0]));    MultipartBody multipartBody = builder.build();    Request request = new Request.Builder().url(url).post(new ProgressRequestBody(multipartBody,listener)).build();    okHttpClient.newCall(request).enqueue(callback);  }

ProgressRequestBody是自定义RequestBody类,用来监听进度:

public class ProgressRequestBody extends RequestBody {  public static final int UPDATE = 0x01;  private RequestBody requestBody;  private ProgressListener mListener;  private BufferedSink bufferedSink;  private MyHandler myHandler;  public ProgressRequestBody(RequestBody body, ProgressListener listener) {    requestBody = body;    mListener = listener;    if (myHandler==null){      myHandler = new MyHandler();    }  }  class MyHandler extends Handler {  //放在主线程中显示     public MyHandler() {      super(Looper.getMainLooper());    }    @Override    public void handleMessage(Message msg) {      switch (msg.what){        case UPDATE:          ProgreSSModel progressModel = (ProgressModel) msg.obj;          if (mListener!=null)mListener.onProgress(progressModel.getCurrentBytes(),progressModel.getContentLength(),progressModel.isDone());          break;      }    }  }  @Override  public MediaType contentType() {    return requestBody.contentType();  }  @Override  public long contentLength() throws IOException {    return requestBody.contentLength();  }  @Override  public void writeTo(BufferedSink sink) throws IOException {    if (bufferedSink==null){      bufferedSink = Okio.buffer(sink(sink));    }    //写入    requestBody.writeTo(bufferedSink);    //刷新    bufferedSink.flush();  }  private Sink sink(BufferedSink sink) {    return new ForwardingSink(sink) {      long bytesWritten = 0L;      long contentLength = 0L;      @Override      public void write(Buffer source, long byteCount) throws IOException {        super.write(source, byteCount);        if (contentLength==0){          contentLength = contentLength();        }        bytesWritten += byteCount;        //回调        Message msg = Message.obtain();        msg.what = UPDATE;        msg.obj = new ProgressModel(bytesWritten,contentLength,bytesWritten==contentLength);        myHandler.sendMessage(msg);      }    };  }}

在MainActivity添加上传按钮点击事件,代码如下:

  File file = new File(basePath + "/1.mp4");        String postUrl = "http://192.168.0.104:8080/OkHttpServer/UploadFileServlet";        OkHttpUtil.postFile(postUrl, new ProgressListener() {          @Override          public void onProgress(long currentBytes, long contentLength, boolean done) {            Log.i(TAG, "currentBytes==" + currentBytes + "==contentLength==" + contentLength + "==done==" + done);            int progress = (int) (currentBytes * 100 / contentLength);            post_progress.setProgress(progress);            post_text.setText(progress + "%");          }        }, new Callback() {          @Override          public void onFailure(Call call, IOException e) {          }          @Override          public void onResponse(Call call, Response response) throws IOException {            if (response != null) {              String result = response.body().string();              Log.i(TAG, "result===" + result);            }          }        }, file);

相关效果图:

Android中怎么利用OkHttp上传文件到服务器 

上传完成后,在电脑D:\huang\upload下可以看到:

Android中怎么利用OkHttp上传文件到服务器

关于Android中怎么利用OkHttp上传文件到服务器问题的解答就分享到这里了,希望以上内容可以对大家有一定的帮助,如果你还有很多疑惑没有解开,可以关注编程网服务器频道了解更多相关知识。

--结束END--

本文标题: Android中怎么利用OkHttp上传文件到服务器

本文链接: https://www.lsjlt.com/news/222427.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • Android中怎么利用OkHttp上传文件到服务器
    Android中怎么利用OkHttp上传文件到服务器,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。一、编写服务器端在上一讲服务器下新建UploadFileServlet,代...
    99+
    2023-05-31
    okhttp android 服务器
  • Android应用中怎么将文件上传到服务器
    这篇文章将为大家详细讲解有关Android应用中怎么将文件上传到服务器,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。1)、新建一个Android项目命名为androidUpload,目录结构...
    99+
    2023-05-31
    android roi
  • Android中怎么利用WebView上传文件
    今天就跟大家聊聊有关Android中怎么利用WebView上传文件,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。接收WebView打开文件选择器的通知收到通知后,打开文件选择器等待用...
    99+
    2023-05-30
    android webview
  • 怎么传文件到云服务器上
    要将文件传输到云服务器上,可以使用以下几种方法:1. 使用FTP:使用FTP客户端软件(如FileZilla)连接到云服务器的FTP...
    99+
    2023-08-18
    云服务器
  • python怎么上传文件到服务器
    要上传文件到服务器,可以使用Python的`requests`库来发送POST请求。以下是一个示例代码:```pythonimpor...
    99+
    2023-09-05
    python 服务器
  • Android上传文件到Web服务器 PHP接收文件
    Android上传文件到服务器,通常采用构造http协议的方法,模拟网页POST方法传输文件,服务器端可以采用JavaServlet或者PHP来接收要传输的文件。使用JavaS...
    99+
    2022-06-06
    Web Web服务 web服务器 PHP Android
  • 怎么把文件上传到云服务器上
    要将文件上传到云服务器上,你可以按照以下步骤进行操作:1. 首先,你需要一个云服务器账号,并确保你已经购买了一个可用的服务器实例。2...
    99+
    2023-08-09
    云服务器
  • android 上传文件到服务器代码实例
     android对于上传文件,还是很简单的,和java里面的上传都是一样的,基本上都是熟悉操作输出流和输入流!还有一个特别重要的就是需要一些content-type这...
    99+
    2022-06-06
    服务器 上传文件 Android
  • 怎么上传文件到Linux云服务器
    在Linux系统云服务器中使用lrzsz上传文件首先,使用命令:yum install -y lrzsz ,安装lrzsz工具;lrzsz工具安装好后,输入命令:rz 上传文件;在弹出选择文件对话框,选择要上传的文件打开;最后输入:sz +...
    99+
    2022-10-21
  • 怎么上传ftp文件到云服务器
    要将文件上传到云服务器,你需要使用一个FTP客户端来执行上传操作。以下是一个基本的步骤:1. 安装一个FTP客户端,比如FileZi...
    99+
    2023-09-22
    云服务器
  • 怎么将文件上传到云服务器
    要将文件上传到云服务器,可以使用以下步骤:1. 确保你已经拥有一个云服务器,并且已经获得了连接服务器的相关信息,如IP地址、用户名和...
    99+
    2023-09-26
    云服务器
  • Android开发中利用Retrofit如何将图文上传到服务器
    Android开发中利用Retrofit如何将图文上传到服务器?很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。前言:现在大多数的项目中都涉及图片+文字上传了,下面...
    99+
    2023-05-31
    retrofit android roi
  • 怎么在Android中利用Retrofit 2.X 上传文件
    怎么在Android中利用Retrofit 2.X 上传文件?针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。Body方式:1、Retrofit接口RetrofitInterf...
    99+
    2023-05-30
    retrofit android
  • java怎么批量上传文件到服务器
    要批量上传文件到服务器,可以使用Java中的FTP客户端库来实现。以下是一个使用Apache Commons Net库的示例代码: ...
    99+
    2023-10-27
    java 服务器
  • 怎么上传文件到腾讯云服务器
    要上传文件到腾讯云服务器,首先需要选择一个云服务器,并创建一个账号。然后,将您的数据备份到云服务器上,以便在需要时可以恢复数据。 以下是上传文件到腾讯云服务器的步骤: 选择云服务器 在选择云服务器时,需要考虑多个因素,包括云服务器的性...
    99+
    2023-10-27
    腾讯 上传文件 服务器
  • 本地文件怎么上传到云服务器
    要将本地文件上传到云服务器,你可以使用以下方法之一:1. 使用SSH命令行工具:在本地计算机上打开终端或命令提示符,然后使用SCP(...
    99+
    2023-09-27
    云服务器
  • 本地文件怎么传到云服务器上
    将本地文件传输到云服务器上有多种方法,下面列举两种常见的方法:1. 使用SCP(Secure Copy)命令:SCP是一种通过加密的...
    99+
    2023-09-27
    云服务器
  • node ftp怎么上传文件夹到服务器
    今天小编给大家分享一下node ftp怎么上传文件夹到服务器的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。完整代码...
    99+
    2023-07-05
  • 云服务器怎么上传文件到电脑
    首先,在选择云服务器时,需要考虑数据存储的需求。如果您需要在线备份重要数据,那么云服务器可能是最好的选择。如果您只是需要一个存储空间,那么本地存储可能是最好的选择。此外,云服务器还支持文件共享和多用户权限控制等功能。 其次,将数据上传到云...
    99+
    2023-10-28
    上传文件 服务器 电脑
  • 怎么上传很大的文件到云服务器上
    要上传很大的文件到云服务器上,你可以使用以下方法:1. 使用FTP:使用一个FTP客户端工具(如FileZilla)连接到云服务器,...
    99+
    2023-09-22
    云服务器
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作