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 に答える