URLConnection always returns 400 : Bad Request when I try to upload a .wav file

馋奶兔 提交于 2019-12-02 10:13:18

After much fiddling with the code, I found a way to upload a wav file with URLConnection, and using multipartentity. Here is the code, enjoy:

public int uploadWav(String sourceFileUri) {  
    String wavpath=Environment.getExternalStorageDirectory().getAbsolutePath()+"/myAppFolder/"+StorageUtils.AUDIO_FILE_NAME+".wav";
    String filename=wavpath;
    HttpURLConnection conn = null;
    DataOutputStream dos = null;  
    String lineEnd = "\r\n";
    String twoHyphens = "--";
    String boundary = "------------------------afb19f4aeefb356c";
    int bytesRead, bytesAvailable, bufferSize;
    byte[] buffer;
    int maxBufferSize = 1 * 1024 * 1024; 
    File sourceFile = new File(fileName); 
    Log.e("joshtag", "Uploading: sourcefileURI, "+fileName);

    if (!sourceFile.isFile()) {                                
         Log.e("uploadFile", "Source File not exist :"+wavpath);//FullPath);                        
         return 0;  //RETURN #1
         }
    else{
        try{        
             Log.v("joshtag","UPLOADING .WAV FILE");
             FileInputStream fileInputStream = new FileInputStream(sourceFile);   
             URL url = new URL(SERVER_URL);
             Log.v("joshtag","UL URL: "+url.toString());

             // Open a HTTP  connection to  the URL
             conn = (HttpURLConnection) url.openConnection(); 
             conn.setDoInput(true); // Allow Inputs
             conn.setDoOutput(true); // Allow Outputs
             conn.setUseCaches(false); // Don't use a Cached Copy            s       
             conn.setRequestMethod("POST");                     
            // conn.setRequestProperty("Connection", "Keep-Alive");
             conn.setRequestProperty("ENCTYPE", "multipart/form-data");
             conn.setRequestProperty("Content-Type", "multipart/form-data;boundary=" + boundary);     
             conn.setRequestProperty("file", sourceFile.getName()); 
             //so on and so forth...
             //conn.setRequestProperty("param", "value");  
             conn.setRequestProperty("connection", "close");
             dos = new DataOutputStream(conn.getOutputStream());          
             dos.writeBytes(twoHyphens + boundary + lineEnd); 
             dos.writeBytes("Content-Disposition: form-data; name=\"file\";filename=\"" + sourceFile.getName() + "\"" + 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) {                        
                    dos.write(buffer, 0, bufferSize);
                    bytesAvailable = fileInputStream.available();
                    bufferSize = Math.min(bytesAvailable, maxBufferSize);
                    bytesRead = fileInputStream.read(buffer, 0, bufferSize);
                    Log.i("joshtag","->");
                    }
             Log.i("joshtag","->->");
             // send multipart form data necesssary after file data...
             dos.writeBytes(lineEnd);
             dos.writeBytes(twoHyphens + boundary + twoHyphens + lineEnd);
             conn.connect();
             Log.i("joshtag","->->->");
             // Responses from the server (code and message)
             serverResponseCode = conn.getResponseCode();
             Log.i("joshtag","->->->->");
             String serverResponseMessage = conn.getResponseMessage().toString();     

             Log.i("joshtag","->->->->->");
             Log.i("joshtag", "HTTP Response is : "  + serverResponseMessage + ": " + serverResponseCode);   

             // ------------------ read the SERVER RESPONSE
             DataInputStream inStream;
             String str="";
             String response="";
             try {
                 Log.i("joshtag","->->->->->->");
                 inStream = new DataInputStream(conn.getInputStream());

                 while ((str = inStream.readLine()) != null) {
                     Log.e("joshtag", "SOF Server Response" + str);
                     response=str;
                    }
                 inStream.close();
                }
             catch (IOException ioex) {
                Log.e("joshtag", "SOF error: " + ioex.getMessage(), ioex);
                }
             conn.disconnect();
             conn=null;                       
             //close the streams //
             fileInputStream.close();
             dos.flush();
             dos.close();    

             if(serverResponseCode == 201){       
                 loge("*** SERVER RESPONSE: 201"+response);
                }//END IF Response code 201  
            // conn.disconnect();
            }//END TRY - FILE READ      
        catch (MalformedURLException ex) {
            ex.printStackTrace();   
            Log.e("joshtag", "UL error: " + ex.getMessage(), ex);  
            } //CATCH - URL Exception

         catch (Exception e) {           
            e.printStackTrace();             
            Log.e("Upload file to server Exception", "Exception : "+ e.getMessage(), e);
            } 

        return serverResponseCode; //after try       
        }//END ELSE, if file exists.
    }
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!