2016-07-06 72 views
1

我正在使用HttpUrlConnection將圖像上傳到Web服務器。當我運行應用程序並嘗試上傳圖像時,我得到一個Http響應200以及接收已上傳的假想圖像的文件名和imageid,但是當我檢查服務器時圖像未上傳。文件名和id現在是列表的一部分,但是當我嘗試檢索圖像時,它返回null。Android:爲什麼我無法將圖像上傳到網絡服務器?

public String uploadFile(String apiPath, String filePath, String type) 
{ 
    String path = ""; 
    String result = ""; 

    switch (type) 
    { 
    case "M": 
     path = "Merchant/" + apiPath; 
     break; 

    case "C": 
     path = "Customer/" + apiPath; 
     break; 
    } 

    Log.i(ApiSecurityManager.class.getSimpleName(), m_token); 

    String href = "http://tysomapi.fr3dom.net/" + path + "?token=" + m_token; 
    Log.i(ApiSecurityManager.class.getSimpleName(), href); 
    try 
    { 
    String myIp = getIp(); 

    URL url = new URL(href); 
    HttpURLConnection conn = (HttpURLConnection) url.openConnection(); 
    conn.setRequestProperty("User-Agent", "java"); 

    conn.setDoInput(true); 
    conn.setUseCaches(false); 
    conn.setRequestMethod("POST"); 
    conn.setRequestProperty("Connection", "Keep-Alive"); 
    conn.setRequestProperty("Content-Type", "multipart/form-data; boundary = " + boundary); 
    conn.setRequestProperty("X-Forwarded-For", myIp); 
    conn.setDoOutput(true); 

    File file = new File(filePath); 

    DataOutputStream ds = new DataOutputStream(conn.getOutputStream()); 
    ds.writeBytes(twoHyphens + boundary + LINE_FEED); 
    ds.writeBytes("Content-Disposition: form-data; name=\"image\"; filename=\"" + file.getName() + "\"" + LINE_FEED); 
    ds.writeBytes("ContentType: image/peg" + LINE_FEED); 
    ds.writeBytes(twoHyphens + boundary + LINE_FEED); 


    FileInputStream fStream = new FileInputStream(file); 

    int bytesAvailable = fStream.available(); 

    int maxBufferSize = 1024; 
    int bufferSize = Math.min(bytesAvailable, maxBufferSize); 
    byte[] buffer = new byte[bufferSize]; 

    int bytesRead = fStream.read(buffer, 0, bufferSize); 

    while (bytesRead > 0) 
    { 
     ds.write(buffer, 0, bufferSize); 
     bytesAvailable = fStream.available(); 
     bufferSize = Math.min(bytesAvailable, maxBufferSize); 
     bytesRead = fStream.read(buffer, 0, bufferSize); 
    } 

    ds.writeBytes(LINE_FEED); 
    ds.writeBytes(twoHyphens + boundary + twoHyphens + LINE_FEED); 

    fStream.close(); 
    ds.flush(); 
    ds.close(); 

    Log.i(getClass().getSimpleName(), "Response Code: " + conn.getResponseCode()); 
    if (conn.getResponseCode() != HttpURLConnection.HTTP_OK) 
    { 
     throw new RuntimeException("Failed : HTTP error code : " 
     + conn.getResponseCode()); 
    } 

    BufferedReader br = new BufferedReader(new InputStreamReader(
     (conn.getInputStream()))); 

    String output; 

    while ((output = br.readLine()) != null) 
    { 
     result = result + output; 
    } 

    conn.disconnect(); 
    } 

    catch (
    MalformedURLException e 
    ) 

    { 
    e.printStackTrace(); 
    } 

    catch (
    IOException e 
    ) 

    { 
    e.printStackTrace(); 
    } 

    return result; 
} 
+0

考慮使用改造 –

+2

'「ContentType:image/peg」'? – greenapps

+0

@greenapps是正確的,你直接寫HTTP頭到'DataOutputStream'。我甚至不確定你是否正在上傳實際圖片。 –

回答

0

我能夠利用的PrintWriter和OutputStream,而不是DataOutputStream類來傳遞的標頭和圖像來解決這個問題。

相關問題