2016-07-06 77 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类来传递的标头和图像来解决这个问题。

相关问题