2012-08-27 136 views
1
public static String fileUploadFromPath(String url, String path) throws Throwable { 

     System.out.println("IN fileUploadFromPath "); 
     String responseData = ""; 
     String NL = System.getProperty("line.separator"); 

     try { 

      System.out.println("url ************ " + url); 
      File file = new File(path); 
      System.out.println("file ************ " + file.getAbsolutePath() 
        + " : " + file.exists()); 
      StringBuilder text = new StringBuilder(); 

      if (file.exists()) { 
       BufferedReader br = new BufferedReader(new FileReader(file)); 
       String line; 

       while ((line = br.readLine()) != null) { 
        text.append(line); 
        text.append(NL); 
       } 
       HttpClient httpClient = new DefaultHttpClient(); 
       HttpPost postRequest = new HttpPost(url); 
       // System.out.println("postRequest ************ " + 
       // postRequest); 
       MultipartEntity multipartContent = new MultipartEntity(); 
       ByteArrayBody key = new ByteArrayBody(text.toString() 
         .getBytes(), AgricultureUtils.getInstance() 
         .getTimeStamp() + ".3gp"); 
       multipartContent.addPart(AgricultureUtils.getInstance() 
         .getTimeStamp() + ".3gp", key); 
       postRequest.setEntity(multipartContent); 
       HttpResponse response = httpClient.execute(postRequest); 
       BufferedReader in = new BufferedReader(new InputStreamReader(
         response.getEntity().getContent())); 
       StringBuffer sb = new StringBuffer(""); 
       String content = ""; 
       while ((content = in.readLine()) != null) { 
        sb.append(content + NL); 
       } 
       in.close(); 

       /* 
       * File myDir = new File(Constants.dirctory); if 
       * (!myDir.exists()) { myDir.mkdirs(); } File myFile = new 
       * File(myDir, fileName); FileOutputStream mFileOutStream = new 
       * FileOutputStream(myFile); 
       * mFileOutStream.write(sb.toString().getBytes()); 
       * mFileOutStream.flush(); mFileOutStream.close(); 
       */ 

       System.out.println("response " + sb); 
      } 

     } catch (Throwable e) { 
      System.out.println("Exception In Webservice ----- " + e); 
      throw e; 
     } 
     return responseData; 
    } 

我想上傳一個音頻文件到服務器。如何在Android中將音頻文件發送到服務器?

我可以通過上面的代碼上傳音頻文件到服務器,但文件不工作(不在系統中播放)。如果你有任何想法,請幫助我。

+0

你好,面對同樣的問題......你能分享你的工作代碼嗎? –

回答

0

您是否檢查服務器上的校驗和?它是否未經修改而到達?

如果不是,請嘗試使用其他方法發佈文件。這一次對我幫助很大:

 /** 
     * Post request (upload files) 
     * @param sUrl 
     * @param params Form data 
     * @param files 
     * @return 
     */ 
     public static HttpData post(String sUrl, Hashtable<String, String> params, ArrayList<File> files) { 
       HttpData ret = new HttpData(); 
       try { 
         String boundary = "*****************************************"; 
         String newLine = "rn"; 
         int bytesAvailable; 
         int bufferSize; 
         int maxBufferSize = 4096; 
         int bytesRead; 

         URL url = new URL(sUrl); 
         HttpURLConnection con = (HttpURLConnection) url.openConnection(); 
         con.setDoInput(true); 
         con.setDoOutput(true); 
         con.setUseCaches(false); 
         con.setRequestMethod("POST"); 
         con.setRequestProperty("Connection", "Keep-Alive"); 
         con.setRequestProperty("Content-Type", "multipart/form-data;boundary="+boundary); 
         DataOutputStream dos = new DataOutputStream(con.getOutputStream()); 

         //dos.writeChars(params); 

         //upload files 
         for (int i=0; i<files.size(); i++) { 
           Log.i("HREQ", i+""); 
           FileInputStream fis = new FileInputStream(files.get(i)); 
           dos.writeBytes("--" + boundary + newLine); 
           dos.writeBytes("Content-Disposition: form-data; " 
           + "name="file_"+i+"";filename="" 
           + files.get(i).getPath() +""" + newLine + newLine); 
           bytesAvailable = fis.available(); 
           bufferSize = Math.min(bytesAvailable, maxBufferSize); 
           byte[] buffer = new byte[bufferSize]; 
           bytesRead = fis.read(buffer, 0, bufferSize); 
           while (bytesRead > 0) { 
             dos.write(buffer, 0, bufferSize); 
             bytesAvailable = fis.available(); 
             bufferSize = Math.min(bytesAvailable, maxBufferSize); 
             bytesRead = fis.read(buffer, 0, bufferSize); 
           } 
           dos.writeBytes(newLine); 
           dos.writeBytes("--" + boundary + "--" + newLine); 
           fis.close(); 
         } 
         // Now write the data 

         Enumeration keys = params.keys(); 
         String key, val; 
         while (keys.hasMoreElements()) { 
           key = keys.nextElement().toString(); 
           val = params.get(key); 
           dos.writeBytes("--" + boundary + newLine); 
           dos.writeBytes("Content-Disposition: form-data;name="" 
           + key+""" + newLine + newLine + val); 
           dos.writeBytes(newLine); 
           dos.writeBytes("--" + boundary + "--" + newLine); 

         } 
         dos.flush(); 

         BufferedReader rd = new BufferedReader(
         new InputStreamReader(con.getInputStream())); 
         String line; 
         while ((line = rd.readLine()) != null) { 
           ret.content += line + "rn"; 
         } 
         //get headers 
         Map<String, List<String>> headers = con.getHeaderFields(); 
         Set<Entry<String, List<String>>> hKeys = headers.entrySet(); 
         for (Iterator<Entry<String, List<String>>> i = hKeys.iterator(); i.hasNext();) { 
           Entry<String, List<String>> m = i.next(); 

           Log.w("HEADER_KEY", m.getKey() + ""); 
           ret.headers.put(m.getKey(), m.getValue().toString()); 
           if (m.getKey().equals("set-cookie")) 
           ret.cookies.put(m.getKey(), m.getValue().toString()); 
         } 
         dos.close(); 
         rd.close(); 
       } catch (MalformedURLException me) { 

       } catch (IOException ie) { 

       } catch (Exception e) { 
         Log.e("HREQ", "Exception: "+e.toString()); 
       } 
       return ret; 
     } 

這是摘自:

http://moazzam-khan.com/blog/?p=490

檢查鏈接的依賴和使用。

1

您應該使用既不FileReader也不StringBuilder這裏它將該數據作爲字符(根據系統默認字符集編碼)。真的,你根本不應該使用Reader。二進制數據應通過InputStream進行處理,例如,

final ByteArrayOutputStream out = new ByteArrayOutputStream(); 
try (final InputStream in = new FileInputStream(file)) { 
    final byte[] buf = new byte[2048]; 
    int n; 
    while ((n = in.read(buf)) >= 0) { 
    out.write(buf, 0, n); 
    } 
} 
final byte[] data = out.toByteArray(); 
+0

謝謝@slavemaster它對我很好。 KSP

相關問題