当前位置: 首页 > 编程笔记 >

Golang+Android基于HttpURLConnection实现的文件上传功能示例

黄昊
2023-03-14
本文向大家介绍Golang+Android基于HttpURLConnection实现的文件上传功能示例,包括了Golang+Android基于HttpURLConnection实现的文件上传功能示例的使用技巧和注意事项,需要的朋友参考一下

本文实例讲述了Golang+Android基于HttpURLConnection实现的文件上传功能。分享给大家供大家参考,具体如下:

这里要演示的是使用Android程序作为客户端(使用HttpURLConnection访问网络),Golang程序作为服务器端,实现文件上传。

客户端代码:

public static String uploadFile(String uploadUrl, String filePath) {
    Log.v(TAG, "url:" + uploadUrl);
    Log.v(TAG, "filePath:" + filePath);
    String nextLine = "\r\n";
    String dividerStart = "--";
    String boundary = "******";
    try {
      URL url = new URL(uploadUrl);
      HttpURLConnection connection = (HttpURLConnection) url.openConnection();
      connection.setChunkedStreamingMode(1024 * 256);
      connection.setDoInput(true);
      connection.setDoOutput(true);
      connection.setUseCaches(false);
      connection.setRequestMethod("POST");
      // 设置Http请求头
      connection.setRequestProperty("Connection", "Keep-Alive");
      connection.setRequestProperty("Charset", "UTF-8");
      //必须在Content-Type 请求头中指定分界符
      connection.setRequestProperty("Content-Type", "multipart/form-data;boundary=" + boundary);
      //定义数据写入流,准备上传文件
      DataOutputStream dos = new DataOutputStream(connection.getOutputStream());
      dos.writeBytes(dividerStart + boundary + nextLine);
      //设置与上传文件相关的信息
      dos.writeBytes("Content-Disposition: form-data; name=\"file\"; filename=\""
          + filePath.substring(filePath.lastIndexOf("/") + 1) + "\"" + nextLine);
      dos.writeBytes(nextLine);
      FileInputStream fis = new FileInputStream(filePath);
      byte[] buffer = new byte[1024 * 32];
      int count;
      // 读取文件内容,并写入OutputStream对象
      while ((count = fis.read(buffer)) != -1) {
        dos.write(buffer, 0, count);
      }
      fis.close();
      dos.writeBytes(nextLine);
      dos.writeBytes(dividerStart + boundary + dividerStart + nextLine);
      dos.flush();
      // 开始读取从服务器传过来的信息
      InputStream is = connection.getInputStream();
      BufferedReader br = new BufferedReader(new InputStreamReader(is, "UTF-8"));
      String result = br.readLine();
      dos.close();
      is.close();
      connection.disconnect();
      return result;
    } catch (IOException e) {
      e.printStackTrace();
    }
    return null;
}

服务器端代码:

package webserver

//接收客户端通过http上传的文件

//Date: 2015-3-25 16:18:33

import (

    "fmt"

    "io/ioutil"

    "log"

    "net/http"

    "os"

)

func UpLoadBase() {

    fmt.Println("This is uploadbase")

    http.HandleFunc("/httpUploadFile", handleUploadFile)

    http.ListenAndServe(":8086", nil)

    if err != nil {

        fmt.Println("ListenAndServe error: ", err.Error())

    }

}

func handleUploadFile(w http.ResponseWriter, r *http.Request) {

    fmt.Println("client:", r.RemoteAddr)

    file, fileHeader, err := r.FormFile("file")

    if err != nil {

        log.Fatal("FormFile:", err.Error())

        return

    }

    defer func() {

        if err := file.Close(); err != nil {

            log.Fatal("Close:", err.Error())

            return

        }

    }()

    //文件名

    fileName := fileHeader.Filename

    if fileName == "" {

        log.Fatal("Param filename cannot be null.")

        return

    }

    //文件内容

    bytes, err := ioutil.ReadAll(file)

    //写到服务端本地文件中

    outputFilePath := "/home/admin/桌面/" + fileName

    err = ioutil.WriteFile(outputFilePath, bytes, os.ModePerm)

    if err != nil {

        log.Fatal("WriteFileError:", err.Error())

        return

    }

    w.Write(([]byte)("上传文件成功!"))

}

希望本文所述对大家Android程序设计有所帮助。

 类似资料:
  • 本文向大家介绍基于Spring实现文件上传功能,包括了基于Spring实现文件上传功能的使用技巧和注意事项,需要的朋友参考一下 本小节你将建立一个可以接受HTTP multi-part 文件的服务。 你将建立一个后台服务来接收文件以及前台页面来上传文件。 要利用servlet容器上传文件,你要注册一个MultipartConfigElement类,以往需要在web.xml 中配置<multipar

  • 本文向大家介绍基于SpringBoot上传任意文件功能的实现,包括了基于SpringBoot上传任意文件功能的实现的使用技巧和注意事项,需要的朋友参考一下 一、pom文件依赖的添加 二、controller层 三、实现的service层 四、在application.properties文件上配置上传的属性 spring.http.multipart.max-file-size=128KB spr

  • 本文向大家介绍Android实现上传文件功能的方法,包括了Android实现上传文件功能的方法的使用技巧和注意事项,需要的朋友参考一下 本文所述为一个Android上传文件的源代码,每一步实现过程都备有详尽的注释,思路比较清楚,学习了本例所述上传文件代码之后,你可以应对其它格式文件的上传。实例中主要实现上传文件至Server的方法,允许Input、Output,不使用Cache,使Androiod

  • 本文向大家介绍基于Jquery插件实现跨域异步上传文件功能,包括了基于Jquery插件实现跨域异步上传文件功能的使用技巧和注意事项,需要的朋友参考一下 先说明白 这个跨域异步上传功能我们借助了Jquery.form插件,它在异步表单方面很有成效,而跨域我们会在HTTP响应头上添加access-control-allow-method,当然这个头标记只有IE10,火狐和谷歌上支持,对于IE10以下的

  • 本文向大家介绍Android使用Volley实现上传文件功能,包括了Android使用Volley实现上传文件功能的使用技巧和注意事项,需要的朋友参考一下 一个项目中用到的使用Volley上传头像文件的例子,供大家参考,具体内容如下 调用方法如下: private File mSelectedPictureFile; mSelectedPictureFile是一个File文件,参数名是file 通

  • 本文向大家介绍ajaxfileupload.js实现上传文件功能,包括了ajaxfileupload.js实现上传文件功能的使用技巧和注意事项,需要的朋友参考一下 使用ajaxfileupload.js实现上传文件功能 一、ajaxFileUpload是一个异步上传文件的jQuery插语法:$.ajaxFileUpload([options]) options参数说明: 1、url