Android 通過httppost上傳文本文件到伺服器。

来源:http://www.cnblogs.com/lipeineng/archive/2016/08/03/5731604.html
-Advertisement-
Play Games

...


/**
     * 往伺服器上上傳文本  比如log日誌
     * @param urlstr        請求的url   
     * @param uploadFile    log日誌的路徑  
     *                                    /mnt/shell/emulated/0/LOG/LOG.log    
     * @param newName        log日誌的名字 LOG.log
     * @return
     */
    public static void httpPost(Activity activity,String urlstr,String uploadFile,String newName) {
        LogUtil.info("getEhttpPostt", "urlstr="+urlstr+";uploadFile="+uploadFile+";newName="+newName,"i");
        String end = "\r\n";
        String twoHyphens = "--";
        String boundary = "*****";//邊界標識 
        int TIME_OUT = 10*1000;   //超時時間
        HttpURLConnection con = null; 
        DataOutputStream ds = null; 
        InputStream is = null;
        try {
            URL url = new URL(urlstr);
            con = (HttpURLConnection) url.openConnection();
            con.setReadTimeout(TIME_OUT);
            con.setConnectTimeout(TIME_OUT);
            /* 允許Input、Output,不使用Cache */
            con.setDoInput(true);
            con.setDoOutput(true);
            con.setUseCaches(false);
 
            // 設置http連接屬性
            con.setRequestMethod("POST");//請求方式
            con.setRequestProperty("Connection", "Keep-Alive");//在一次TCP連接中可以持續發送多份數據而不會斷開連接
            con.setRequestProperty("Charset", "UTF-8");//設置編碼
            con.setRequestProperty("Content-Type",//multipart/form-data能上傳文件的編碼格式
                    "multipart/form-data;boundary=" + boundary);
 
            ds = new DataOutputStream(con.getOutputStream());
            ds.writeBytes(twoHyphens + boundary + end);
            ds.writeBytes("Content-Disposition: form-data; "
                    + "name=\"stblog\";filename=\"" + newName + "\"" + end);
            ds.writeBytes(end);
 
            // 取得文件的FileInputStream
            FileInputStream fStream = new FileInputStream(uploadFile);
            /* 設置每次寫入1024bytes */
            int bufferSize = 1024;
            byte[] buffer = new byte[bufferSize];
            int length = -1;
            /* 從文件讀取數據至緩衝區 */
            while ((length = fStream.read(buffer)) != -1) {
                /* 將資料寫入DataOutputStream中 */
                ds.write(buffer, 0, length);
            }
            ds.writeBytes(end);
            ds.writeBytes(twoHyphens + boundary + twoHyphens + end);//結束
 
            fStream.close();
            ds.flush();
            /* 取得Response內容 */
            is = con.getInputStream();
            int ch;
            StringBuffer b = new StringBuffer();
            while ((ch = is.read()) != -1) {
                b.append((char) ch);
            }
            /* 將Response顯示於Dialog */
            showDialog(activity,true,uploadFile,"上傳成功" + b.toString().trim());
        } catch (Exception e) {
            showDialog(activity,false,uploadFile,"上傳失敗" + e);
        }finally {
             /* 關閉DataOutputStream */
            if(ds!=null){
                try {
                 ds.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
            if (is != null) {
                try {
                    is.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
            if (con != null) {
                con.disconnect();
            }
        }
    }
    /* 顯示Dialog的method */
    private static void showDialog(final Activity activity,final Boolean isSuccess,final String uploadFile,final String mess) {
        activity.runOnUiThread(new Runnable() {
            @Override
            public void run() {
                new AlertDialog.Builder(activity).setTitle("Message")
                .setMessage(mess)
                .setNegativeButton("確定", new DialogInterface.OnClickListener() {
                    public void onClick(DialogInterface dialog, int which) {
                        File file = new File(uploadFile);
                        if(file.exists()&&isSuccess){//日誌文件存在且上傳日誌成功
                            file.delete();
                            Toast.makeText(activity, "log日誌已刪除", Toast.LENGTH_SHORT).show();
                        }
                    }
                }).show();
            }
        });
        
    }

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 使用osChina分支的創建分為兩種 1.直接在osChina上創建 需要pull否則查看git的狀態是不包含改分支的; 2.使用git命令創建分支 需要push否則查看osChina的分支的是不包含改分支的; 查看git下的所有分支 --online不是必須的,只是加上之後數據顯示會精簡很多。 " ...
  • 一個APP的需求來自於哪兒?產品、老闆、客戶….. 做程式員不容易,需求一句話,就是幾千幾萬行代碼!所幸,在AppCan平臺開發APP,開發者只需完成應用的前端部分,至於各項複雜的功能,就交給AppCan來搞定吧! ...
  • 最近項目中經常有遇到從伺服器請求的數據是null的情況,這種情況下如果用[dic objectForKey:@"key"]方法,程式會發生崩潰現象,因為項目是以前的老項目,而且有太多個這樣的方法,於是想起了前幾天的runtime知識,嘗試簡單的實現了一個交換方法。 1.首先實現了一個字典的分類。 2 ...
  • 1:iOS SEL的簡單總結 SEL就是對方法的一種包裝。包裝的SEL類型數據它對應相應的方法地址,找到方法地址就可以調用方法 a.方法的存儲位置 在記憶體中每個類的方法都存儲在類對象中 每個方法都有一個與之對應的SEL類型的數據 根據一個SEL數據就可以找到對應的方法地址,進而調用方法 SEL類型的 ...
  • Mobile What to Expect From Swift 3 Web A practical security guide for web developers Gulp Succinctly – free book Running Node.js on Linux With systemd... ...
  • 文件下載主要代碼也不多,使用原生的DownloadManage來實現該功能: AndroidManifest中添加許可權 <uses-permission android:name="android.permission.INTERNET" /> <uses-permission android:na ...
  • 寫的例子比較簡單,是用xutils3.0來進行下載項目更新 1.先通過網路請求,判斷版本是否要更新 2.若要更新,則彈出一個彈窗,我用的是系統自帶的Dialog,將下載的版本號及下載的內容提示展示出來 3.當用戶點擊下載時,開始下載,下載時展示一個水平的進度條 4.下載完成後,進度條消失,調用系統安 ...
  • NSDate * senddate=[NSDate date]; NSDateFormatter *dateformatter=[[NSDateFormatter alloc] init]; [dateformatter setDateFormat:@"YYYYMMdd"]; NSString * ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...