Golang+Android(使用HttpURLConnection)實現檔案上傳

來源:互聯網
上載者:User

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/admin/案頭/" + fileNameerr = ioutil.WriteFile(outputFilePath, bytes, os.ModePerm)if err != nil {log.Fatal("WriteFileError:", err.Error())return}w.Write(([]byte)("上傳檔案成功!"))}


 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.