2

我想通过 http post 方法将文件从我们的应用程序发送到服务器。

我的代码看起来像休闲

     HttpURLConnection conn = null;
     DataOutputStream dos = null;
     DataInputStream inStream = null;
     String existingFileName = Environment.getExternalStorageDirectory().getAbsolutePath() 
             + "/TamTrack/TamTrackDetails.xml";
     String lineEnd = "\r\n";
     String twoHyphens = "--";
     String boundary =  "*****";
     int bytesRead, bytesAvailable, bufferSize;
     byte[] buffer;
     int maxBufferSize = 1*1024*1024;
     String responseFromServer = "";
     String urlString = "http://192.158.1.7/Geo/myfilename";
     try
     {
      //------------------ CLIENT REQUEST
     FileInputStream fileInputStream = new FileInputStream(new File(existingFileName) );
      // open a URL connection to the Servlet
      URL url = new URL(urlString);
      // Open a HTTP connection to the URL
      conn = (HttpURLConnection) url.openConnection();
      // Allow Inputs
      conn.setDoInput(true);
      // Allow Outputs
      conn.setDoOutput(true);
      // Don't use a cached copy.
      conn.setUseCaches(false);
      // Use a post method.
      conn.setRequestMethod("POST");
      conn.setRequestProperty("Connection", "Keep-Alive");
      conn.setRequestProperty("Content-Type", "multipart/form-data;boundary="+boundary);
      dos = new DataOutputStream( conn.getOutputStream() );
      dos.writeBytes(twoHyphens + boundary + lineEnd);
      dos.writeBytes("Content-Disposition: form-data; name=\"uploadedfile\";filename=\"" + existingFileName + "\"" + lineEnd);
      dos.writeBytes(lineEnd);
      // create a buffer of maximum size
      bytesAvailable = fileInputStream.available();
      bufferSize = Math.min(bytesAvailable, maxBufferSize);
      buffer = new byte[bufferSize];
      // read file and write it into form...
      bytesRead = fileInputStream.read(buffer, 0, bufferSize);
      //while (bytesRead > 0)
      Log.v("info",".size."+bytesRead);
      for(int n1=0;n1<bytesRead;n1++)
      {


       dos.write(buffer, 0, bufferSize);
       bytesAvailable = fileInputStream.available();
       bufferSize = Math.min(bytesAvailable, maxBufferSize);
       bytesRead = fileInputStream.read(buffer, 0, bufferSize);

      }

      dos.writeBytes(lineEnd);
      dos.writeBytes(twoHyphens + boundary + twoHyphens + lineEnd);
      // close streams
      Log.v("info","File is written");
      fileInputStream.close();
      dos.flush();
      dos.close();
     }
     catch (MalformedURLException ex)
     {
          Log.v("info", "error: " + ex.getMessage(), ex);
     }
     catch (IOException ioe)
     {
          Log.v("info", "error: " + ioe.getMessage(), ioe);
     }
     //------------------ read the SERVER RESPONSE
     try {
           inStream = new DataInputStream ( conn.getInputStream() );
           String str;

           while (( str = inStream.readLine()) != null)
           {
                Log.v("info","Server Response "+str);
           }
           inStream.close();

     }
     catch (IOException ioex)
     {
          Log.v("info", "error: " + ioex.getMessage(), ioex);
     }
    return null;

它工作正常。但是在服务器中创建了空文件。

如果有人知道解决方案,请帮助我。

提前致谢。

4

2 回答 2

0

我更喜欢使用 Apache Http commons,它是 android 的一部分。我认为这是一种更简单、更清洁的方法。你需要做这样的事情:

AndroidHttpClient client = AndroidHttpClient.newInstance("useragent string");
URI uri = "something";
File file = new File("/tmp/data");
HttpPost post = new HttpPost(uri);
post.setEntity(new FileEntity(file, "text/html"));
HttpResponse httpResponse = client.execute(post);
int statusCode = httpResponse.getStatusLine().getStatusCode();
于 2012-11-09T09:15:36.850 回答
0

试试这个代码。它使用一个“SimpleMultipartEntity”类,您可以使用它轻松发送文件。

于 2012-11-09T08:58:09.553 回答