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:33import ("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.Filenameif fileName == "" {log.Fatal("Param filename cannot be null.")return}//文件内容bytes, err := ioutil.ReadAll(file)//写到服务端本地文件中outputFilePath := "/home/hanj/桌面/" + fileNameerr = ioutil.WriteFile(outputFilePath, bytes, os.ModePerm)if err != nil {log.Fatal("WriteFileError:", err.Error())return}w.Write(([]byte)("上传文件成功!"))}

刺是与生俱来的,上帝在赐予优越感同时捆-绑的附属品;

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

相关文章:

你感兴趣的文章:

标签云: