2010-08-10 163 views
1

我想使用MultipartPostData在黑莓模擬器中上傳圖片,以下是我的代碼,但它似乎不起作用。我還簽署了我的.cod文件。任何人都可以幫助我嗎?使用黑莓手機上傳圖片

public void postData(String Url, bytes[] data) 
{ 
if (DeviceInfo.isSimulator()){ 
Url=Url+";deviceSide=true"; 
} 
HttpConnection httpConn=null; 
OutputStream os=null; 
InputStream is=null; 
String url=Url; 
try { 
    PostData form = new MultipartPostData(MultipartPostData.DEFAULT_CHARSET, false) ; 
    byte [] postData = data; 
form.setData(postData); 

     httpConn = (HttpConnection) Connector.open(url); 
     httpConn.setRequestMethod(HttpConnection.POST); 
    httpConn.setRequestProperty("User-Agent", "BlackBerry"); 
    httpConn.setRequestProperty("Content-Type", "multipart/form-data"); 
    httpConn.setRequestProperty("MIME-Type", "Image/Jpeg"); 
     httpConn.setRequestProperty(HttpProtocolConstants.HEADER_CONTENT_LENGTH, String.valueOf(postData.length)); 
     httpConn.setRequestProperty("Content-Language", "en-US"); 

     os =httpConn.openOutputStream(); 
     os.write(form.getBytes()); 

    //read response 
    StringBuffer sb = new StringBuffer(); 
    is = httpConn.openDataInputStream(); 
    int chr; 
    while ((chr = is.read()) != -1) 
     sb.append((char) chr); 

    System.out.println("Result................................ " + sb.toString()); 
    String result=sb.toString(); 
} 
catch(Exception e) 
{ 
    System.out.println(e.toString()); 
} 
finally { 
    try{ 
     if(is!= null) 
      is.close(); 
     if(os != null) 
      os.close(); 
if(httpConn != null) 
httpConn.close(); 
} catch(Exception e1){ 
     System.out.println(e1.toString()); 
    } 
    } 
} 
+0

任何HTTP錯誤? – 2010-08-12 05:05:00

+0

根本沒有http錯誤 – Achal 2010-08-12 06:55:06

+0

實際上,MultipartPostData應該使用badary和「Content-Disposition」行來構建發佈數據。 您是否找到任何方式來執行您的請求?我正在嘗試做同樣的事情,無法將任何數據傳遞給服務器(服務器在帖子中只看到空數組)。 – obo 2011-03-18 09:24:08

回答

2

//你必須有一個bundary後格式化數據,.cod文件必須在模擬器上工作

httpConn = (HttpConnection)connDesc.getConnection(); 
       httpConn.setRequestMethod(HttpConnection.POST);   
    httpConn.setRequestProperty("user-agent", "BlackBerry");  
    httpConn.setRequestProperty("content-type", "multipart/form-data; boundary=----------V2ymHFg03ehbqgZCaKO6jy"); 

      os = httpConn.openOutputStream(); 
      //os.write(form.getBytes()); 

      byte[] fileBytes = {1,2,3,4}; //retrieve file bytes with your own code     

      ByteArrayOutputStream bos = new ByteArrayOutputStream(); 

      bos.write(("\r\n--" + "----------V2ymHFg03ehbqgZCaKO6jy" + "\r\n").getBytes()); 
     bos.write(("Content-Disposition: form-data; name=\"mifoto\"; filename=\"leo.gif\"\r\n").getBytes()); 
     bos.write(("Content-Type: image/gif\r\n\r\n").getBytes()); 
      bos.write(fileBytes); 
     bos.write(("\r\n--" + "----------V2ymHFg03ehbqgZCaKO6jy" + "--\r\n").getBytes()); 

      os.write(bos.toByteArray()); 
1

只要您撥打MultipartPostData.setData(),它將覆蓋所有的內容處理你的數據已設置爲MultipartPostData.append()

leonel的答案有用,或者您可以使用Vlad Patryshev的ClientHttpRequest類。