将图像上传到php linux服务器

时间:2011-11-19 02:32:55

标签: android

我想将图片上传到服务器。我使用http://katharnavas.blogspot.com/2009/10/upload-files-from-mobile.html代码和其他方法,但手机有时会失败,模拟机总是运行良好。你能帮我分析一下错误的原因以及我是否需要一些设置?谢谢。

private void upload3()
{

  HttpURLConnection connection = null;
  DataOutputStream outputStream = null;
  DataInputStream inputStream = null;

  String pathToOurFile = fileName;
  Log.e("pathToOurFile",""+pathToOurFile);

  String urlServer = urlStr;
  String lineEnd = "\r\n";
  String twoHyphens = "--";
  String boundary =  "*****";
  Log.e("URL Server",""+urlServer);

  int bytesRead, bytesAvailable, bufferSize;
  byte[] buffer;
  int maxBufferSize = 1*1024*1024;
  Log.e("maxBufferSize",""+maxBufferSize);

  try
  {
      FileInputStream fileInputStream = new FileInputStream(new File(pathToOurFile) );
      Log.e("FIS",""+fileInputStream);
      URL url = new URL(urlServer);
      connection = (HttpURLConnection) url.openConnection();



//  Allow Inputs & Outputs
          connection.setDoInput(true);
          connection.setDoOutput(true);
          connection.setUseCaches(false);

      // Enable POST method
      connection.setRequestMethod("POST");

      connection.setRequestProperty("Connection", "Keep-Alive");
      connection.setRequestProperty("Content-Type", "multipart/form-data;boundary="+boundary);

      outputStream = new DataOutputStream( connection.getOutputStream() );
      outputStream.writeBytes(twoHyphens + boundary + lineEnd);
      outputStream.writeBytes("Content-Disposition: form-data; name=\"fileToUpload\";filename=\"" + pathToOurFile +"\"" + lineEnd);
      outputStream.writeBytes(lineEnd);

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

      // Read file
      bytesRead = fileInputStream.read(buffer, 0, bufferSize);

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

      outputStream.writeBytes(lineEnd);
      outputStream.writeBytes(twoHyphens + boundary + twoHyphens + lineEnd);

      // Responses from the server (code and message)
      Log.e("con",String.valueOf(connection.getDoOutput()));


      String   serverResponseMessage = connection.getResponseMessage();

      Log.e("serverResponseMessage",""+serverResponseMessage);
      InputStream is = connection.getInputStream();

        int ch=-1;
         StringBuffer b = new StringBuffer();
        while ((ch = is.read()) != -1) {
            b.append((char) ch);
        }
        Log.d("log", "返回数据-"+b.toString().trim());
      fileInputStream.close();
      outputStream.flush();
      outputStream.close();
  }
  catch (Exception ex)
  {
      Log.e("Exception Handling",""+ex);
  }
}

1 个答案:

答案 0 :(得分:0)

我设置了超时,有时候需要重启手机,一切都好了