Golang+Android(使用HttpURLConnection)实现文件上传

books1958 · · 2067 次点击 · · 开始浏览    
这是一个创建于 的文章,其中的信息可能已经有所发展或是发生改变。

本文要演示的是使用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)("上传文件成功!"))
}



有疑问加站长微信联系(非本文作者)

本文来自:CSDN博客

感谢作者:books1958

查看原文:Golang+Android(使用HttpURLConnection)实现文件上传

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889

2067 次点击  
加入收藏 微博
暂无回复
添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传