2016-07-06 10 views
1

私はHttpUrlConnectionを使用して画像をWebサーバーにアップロードしています。私は、アプリケーションを実行し、画像をアップロードしようとすると、アップロードされた想定画像のファイル名と画像IDを受け取るだけでなく、HTTPレスポンス200を受け取るが、サーバーを確認すると画像はアップロードされなかった。ファイル名とIDがリストの一部になりましたが、イメージを取得しようとするとnullが返されます。Android:なぜ画像をWebサーバーにアップロードできないのですか?

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

私は、ヘッダーとイメージを渡すために、DataWriterの代わりにPrintWriterとOutputStreamを使用することで問題を解決できました。

関連する問題