使用POST从Android的捐赠除了对服务器Uploding文件服务器、文件、POST、Android

2023-09-06 15:14:33 作者:动感超人

我要上传文件服务器的服务器的信息是

I have a server to upload file the server info is

<form action="FileUpload" method="post" enctype="multipart/form-data">
Select File <input type="file" name="file1">
<p>
Select Filename <input type="text" size="20" name="filename">
<p>
<input type=submit value="Upload">
</form>

我使用下面code上传文件

I am uploading file using below code

private boolean doFileUpload ( ) {
        boolean success = false ;

        HttpURLConnection conn = null ;
        DataOutputStream dos = null ;
        DataInputStream inStream = null ;

        String exsistingFileName = filePath ; 

        String lineEnd = "\r\n" ;
        String twoHyphens = "--" ;
        String boundary = "*****" ;

        int bytesRead , bytesAvailable , bufferSize ;

        byte [ ] buffer ;

        int maxBufferSize = 1 * 1024 * 1024 ;

        String responseFromServer = "" ;

        String urlString = "http://paperify.net/tripmark/FileUpload" ;

        try {
            // ------------------ CLIENT REQUEST

            Log.e ( "MediaPlayer" , "Inside second Method" ) ;

            FileInputStream fileInputStream = new FileInputStream ( new File ( exsistingFileName ) ) ;

            // 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 ( "action" , "FileUpload" ) ;
            conn.setRequestProperty ( "file" , "myfile" ) ;
            conn.setRequestProperty ( "value" , "Upload" ) ;


            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=\"" + exsistingFileName + "\"" + lineEnd ) ;
            dos.writeBytes ( lineEnd ) ;

            Log.e ( "MediaPlayer" , "Headers are written" ) ;

            // 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 ) {
                dos.write ( buffer , 0 , bufferSize ) ;
                bytesAvailable = fileInputStream.available ( ) ;
                bufferSize = Math.min ( bytesAvailable , maxBufferSize ) ;
                bytesRead = fileInputStream.read ( buffer , 0 , bufferSize ) ;
            }

            // send multipart form data necesssary after file data...

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

            BufferedReader in = new BufferedReader ( new InputStreamReader ( conn.getInputStream ( ) ) ) ;
            String inputLine ;

            while ( ( inputLine = in.readLine ( ) ) != null )
                Log.e ( "Res" , "" + inputLine ) ;

            // close streams
            Log.e ( "MediaPlayer" , "File is written" ) ;
            success = true ;
            fileInputStream.close ( ) ;
            dos.flush ( ) ;
            dos.close ( ) ;

        } catch ( MalformedURLException ex ) {
            Log.e ( "MediaPlayer" , "error: " + ex.getMessage ( ) , ex ) ;
            success = false ;
        }

        catch ( IOException ioe ) {
            Log.e ( "MediaPlayer" , "error: " + ioe.getMessage ( ) , ioe ) ;
            success = false ;
        }

        // ------------------ read the SERVER RESPONSE

        try {
            inStream = new DataInputStream ( conn.getInputStream ( ) ) ;
            String str ;

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

        } catch ( IOException ioex ) {
            Log.e ( "MediaPlayer" , "error: " + ioex.getMessage ( ) , ioex ) ;
        }
        return success ;
    }

它没有上传文件,但给除了下面

It did not upload file but give exception below

12-16 01:04:37.031: E/MediaPlayer(24133): Headers are written
12-16 01:04:40.410: E/MediaPlayer(24133): error: http://paperify.net/tripmark/FileUpload
12-16 01:04:40.410: E/MediaPlayer(24133): java.io.FileNotFoundException: http://paperify.net/tripmark/FileUpload
12-16 01:04:40.410: E/MediaPlayer(24133):   at org.apache.harmony.luni.internal.net.www.protocol.http.HttpURLConnectionImpl.getInputStream(HttpURLConnectionImpl.java:521)
12-16 01:04:40.410: E/MediaPlayer(24133):   at com.paperify.tripmark.UploadPicture.doFileUpload(UploadPicture.java:141)
12-16 01:04:40.410: E/MediaPlayer(24133):   at com.paperify.tripmark.UploadPicture.doInBackground(UploadPicture.java:39)
12-16 01:04:40.410: E/MediaPlayer(24133):   at com.paperify.tripmark.UploadPicture.doInBackground(UploadPicture.java:1)
12-16 01:04:40.410: E/MediaPlayer(24133):   at android.os.AsyncTask$2.call(AsyncTask.java:185)
12-16 01:04:40.410: E/MediaPlayer(24133):   at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:306)
12-16 01:04:40.410: E/MediaPlayer(24133):   at java.util.concurrent.FutureTask.run(FutureTask.java:138)
12-16 01:04:40.410: E/MediaPlayer(24133):   at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1088)
12-16 01:04:40.410: E/MediaPlayer(24133):   at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:581)
12-16 01:04:40.410: E/MediaPlayer(24133):   at java.lang.Thread.run(Thread.java:1019)
12-16 01:04:40.437: E/MediaPlayer(24133): error: http://paperify.net/tripmark/FileUpload
12-16 01:04:40.437: E/MediaPlayer(24133): java.io.FileNotFoundException: http://paperify.net/tripmark/FileUpload
12-16 01:04:40.437: E/MediaPlayer(24133):   at org.apache.harmony.luni.internal.net.www.protocol.http.HttpURLConnectionImpl.getInputStream(HttpURLConnectionImpl.java:521)
12-16 01:04:40.437: E/MediaPlayer(24133):   at com.paperify.tripmark.UploadPicture.doFileUpload(UploadPicture.java:167)
12-16 01:04:40.437: E/MediaPlayer(24133):   at com.paperify.tripmark.UploadPicture.doInBackground(UploadPicture.java:39)
12-16 01:04:40.437: E/MediaPlayer(24133):   at com.paperify.tripmark.UploadPicture.doInBackground(UploadPicture.java:1)
12-16 01:04:40.437: E/MediaPlayer(24133):   at android.os.AsyncTask$2.call(AsyncTask.java:185)
12-16 01:04:40.437: E/MediaPlayer(24133):   at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:306)
12-16 01:04:40.437: E/MediaPlayer(24133):   at java.util.concurrent.FutureTask.run(FutureTask.java:138)
12-16 01:04:40.437: E/MediaPlayer(24133):   at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1088)
12-16 01:04:40.437: E/MediaPlayer(24133):   at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:581)
12-16 01:04:40.437: E/MediaPlayer(24133):   at java.lang.Thread.run(Thread.java:1019)

第1行com.paperify.tripmark.UploadPicture.doFileUpload(UploadPicture.java:141)

BufferedReader in = new BufferedReader ( new InputStreamReader ( conn.getInputStream ( ) ) ) ;

我不知道自己做错了什么,我做的......请大家帮帮我。该文件没有出现在服务器

I don't know what wrong I am doing... Please help me. The file did not appear on server

推荐答案

使用HTTP客户端。下面是一个示例code。

Use HTTP client. Here is a sample code.

import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.client.HttpClient;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.entity.mime.MultipartEntity;
import org.apache.http.entity.mime.content.FileBody;
import org.apache.http.entity.mime.content.StringBody;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.util.EntityUtils;

...

    public static void uploadFile() throws Exception {
        HttpClient httpclient = new DefaultHttpClient();
        try {
            HttpPost httppost = new HttpPost("http://paperify.net/tripmark/FileUpload");
            StringBody filename = new StringBody("filename.ext");
            File f = new File("src"+File.separator + "filename.ext");
            FileBody bin = new FileBody(f);
            StringBody comment = new StringBody("A binary file of some kind");

            MultipartEntity reqEntity = new MultipartEntity();
            reqEntity.addPart("file1", bin);
            reqEntity.addPart("filename", filename);
            reqEntity.addPart("comment", comment);

            httppost.setEntity(reqEntity);

            System.out.println("executing request " + httppost.getRequestLine());
            HttpResponse response = httpclient.execute(httppost);
            HttpEntity resEntity = response.getEntity();

            System.out.println("----------------------------------------");
            System.out.println(response.getStatusLine());
            if (resEntity != null) {
                System.out.println("Response content length: " + resEntity.getContentLength());
                    InputStream is = resEntity.getContent();
                        if (is != null) {
                        Writer writer = new StringWriter();

                        char[] buffer = new char[1024];
                        try {
                            Reader reader = new BufferedReader(
                                    new InputStreamReader(is, "UTF-8"));
                            int n;
                            while ((n = reader.read(buffer)) != -1) {
                                writer.write(buffer, 0, n);
                            }
                        } finally {
                            is.close();
                        }
                        System.out.println("Response content: "+writer.toString());
                    } else {        
                            System.out.println("Response nothing: ");
                    }


            }
            EntityUtils.consume(resEntity);
        } finally {
            try { httpclient.getConnectionManager().shutdown(); } catch (Exception ignore) {}
        }
    }

}