2011-10-22 14 views
7

Tengo un problema al cargar el archivo .doc en .Net WCF desde mi aplicación de Android. Puedo enviar el archivo pero no es compatible con WCF. Aquí es mi método para la carga:¿Subir archivos de MS Word de Android a .Net WCF?

protected void checkinmethod(String rid) throws Exception { 

     File SDCardRoot = Environment.getExternalStorageDirectory(); 
     //create a new file, specifying the path, and the filename 
     //which we want to save the file as. 
     File file = new File(SDCardRoot, rid+".doc"); 
     InputStream in = new FileInputStream(file); 

     byte[] bytearray=new byte[(int) file.length()]; 

     int ab=0; 
     do 
     { 
      ab=in.read(bytearray, 0, bytearray.length); 

     } while(ab>0); 



     InputStream mystream= new ByteArrayInputStream(bytearray); 
     InputStreamEntity se=new InputStreamEntity(mystream, 10000); 

     HttpPost request = new HttpPost("http://10.66.52.247/tutorwcf/Service.svc/Service/updateMyDoc1"); 
     request.setHeader("Accept", "application/json"); 
     request.setHeader("Content-type", "application/msword"); 
     request.setEntity(se); 





     try { 



      DefaultHttpClient httpClient = new DefaultHttpClient(); 

      HttpResponse response = httpClient.execute(request); 

      HttpEntity responseEntity = response.getEntity(); 

      // Read response data into buffer 
      char[] buffer = new char[(int)responseEntity.getContentLength()]; 
      InputStream stream = responseEntity.getContent(); 
      InputStreamReader reader = new InputStreamReader(stream); 
      reader.read(buffer); 
      stream.close(); 
      statuss.setText(new String(buffer)); 

     // 
     } 
     catch (Exception e) { 
      // TODO: handle exception 
      Log.e("hi", "exception is", e); 
      statuss.setText("exception"); 
     } 
    } 

aquí es el código .net:

FileStream fileToupload = new FileStream("D:\\myfile.doc", FileMode.Create, FileAccess.Write); 

byte[] bytearray = new byte[10000]; 
int bytesRead, totalBytesRead = 0; 
do 
{ 
bytesRead = mystream.Read(bytearray, 0, bytearray.Length); 
totalBytesRead += bytesRead; 
} while (bytesRead > 0); 

fileToupload.Write(bytearray, 0, bytearray.Length); 
fileToupload.Close(); 
fileToupload.Dispose(); 
return "success"; 

} 

Por favor, envíe enlaces o código, o cualquier cosa.

Si usted no tiene idea acerca de esto, por favor clasificar a esta cuestión .. gracias

+0

¿Cuál es el problema exacto? ¿Obtiene algún mensaje de error o excepción cuando ejecuta el código? – Kangkan

+0

Señor, en el extremo wcf estoy obteniendo un archivo de palabras. Cuando trato de abrirlo, me muestra el error "error de lectura". pero cuando lo abro en un bloc de notas o en un teclado, me muestra símbolos como este: ÐÏà¡ ± á X «Ç3aZ ¢ ÒÂà, ° D0 j ~ è3߶Îbãí ~ i> ƒØÍ3¿ \' õ? ê/ç [ج ¶Géâ \ Ä! Ý-ÛRk. –

+0

¿has subido tu pregunta? – Krishnabhadra

Respuesta

3
public void checkinstream(String rid, String filename) throws IOException 
     { 
        URL url=null; 
       HttpURLConnection conn = null; 
        DataOutputStream dos = null; 
        DataInputStream inStream = null; 
        String existingFileName= null; 

        existingFileName= "/mnt/sdcard/"+rid+".doc"; 
        int bytesRead, bytesAvailable, bufferSize; 
        byte[] buffer; 
        int maxBufferSize = Integer.MAX_VALUE; 
        String responseFromServer = ""; 


       url = new URL("http://10.66.51.241/mywcf/Service.svc/Service/uploadMyDoc");    

        try 
        { 
        //------------------ CLIENT REQUEST 
        FileInputStream fileInputStream = new FileInputStream(new File(existingFileName)); 

        // 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", "application/stream"); 
        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) 
        { 
         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); 


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

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

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


     } 

En el extremo .net crear un método WCF que recibe corriente. Gracias.

Cuestiones relacionadas