1. 程式人生 > >使用form-data表單上傳圖片

使用form-data表單上傳圖片

這是參考的大神的文章,連結忘了,這是很早的參考文章寫出來的。只需改動幾個地方,就OK
public class FileImageUpload {

private static final String TAG = “uploadFile”;
private static final int TIME_OUT = 10*10000000; //超時時間
private static final String CHARSET = “utf-8”; //設定編碼
public static final String SUCCESS=”1”;
public static final String FAILURE=”0”;

/* android上傳檔案到伺服器
* @param file 需要上傳的檔案
* @param RequestURL 請求的rul
* @return 返回響應的內容
*/
public static String uploadFile(File file,String RequestURL,Context mcontext) {
String BOUNDARY = UUID.randomUUID().toString(); //邊界標識 隨機生成
String PREFIX = “–” , LINE_END = “\r\n”;
String CONTENT_TYPE = “multipart/form-data”; //內容型別
try {

        URL url = new URL(RequestURL);   
        HttpURLConnection conn = (HttpURLConnection) url.openConnection();
        conn.setReadTimeout(TIME_OUT);
        conn.setConnectTimeout(TIME_OUT);
        conn.setDoInput(true); //允許輸入流  
        conn.setDoOutput(true); //允許輸出流  
        conn.setUseCaches(false); //不允許使用快取

      //  conn.setRequestMethod("POST"); //請求方式   如有需要,新增請求頭
        /*conn.setRequestP



        //設定編碼   
        conn.setRequestProperty("connection", "keep-alive");   
        conn.setRequestProperty("Content-Type", CONTENT_TYPE + ";boundary=" + BOUNDARY);  
        if(file!=null) {
            /** * 當檔案不為空,把檔案包裝並且上傳 */  
            OutputStream outputSteam=conn.getOutputStream();   
            DataOutputStream dos = new DataOutputStream(outputSteam);   
            StringBuffer sb = new StringBuffer();   
            sb.append(PREFIX);   
            sb.append(BOUNDARY); sb.append(LINE_END);   
            /**  
            * 這裡重點注意:  
            * name裡面的值為伺服器端需要key 只有這個key 才可以得到對應的檔案  
            * filename是檔案的名字,包含字尾名的 比如:abc.png  
            * name對應的屬性是  圖片的格式  自己是什麼就填什麼  如: pic  jseg
            * Content-Type  值 需要上網查查,對應相應的值
            */   
            sb.append("Content-Disposition: form-data; name=\"pic\"; filename=\""+file.getName()+"\""+LINE_END);
            sb.append("Content-Type: image/png; charset="+CHARSET+LINE_END);   
            sb.append(LINE_END);   
            dos.write(sb.toString().getBytes());
            InputStream is = new FileInputStream(file);
            byte[] bytes = new byte[1024];   
            int len = 0;
            while((len=is.read(bytes))!=-1)
            {   
               dos.write(bytes, 0, len);   
            }   
            is.close();   
            dos.write(LINE_END.getBytes());   
            byte[] end_data = (PREFIX+BOUNDARY+PREFIX+LINE_END).getBytes();   
            dos.write(end_data);   
            dos.flush();  
            /**  
            * 獲取響應碼 200=成功  
            * 當響應成功,獲取響應的流  
            */   
            int res = conn.getResponseCode();


            String s=conn.getContent().toString();

            if(res==200)

            {
                BufferedReader input = new BufferedReader(new InputStreamReader(conn.getInputStream()));
                StringBuilder response = new StringBuilder();
                String oneLine;
                while((oneLine = input.readLine()) != null) {

                    response.append(oneLine + LINE_END);
                }

                return response.toString();
            }  
        }
    } catch (MalformedURLException e)   {

        e.printStackTrace();
    }  catch (IOException e) {

        e.printStackTrace();
    }

    return FAILURE;
}

}