android - 将 MS Word 文件从 Android 上传到 .Net WCF?

标签 android wcf post file-upload io

我在将 .doc 文件从我的 Android 应用程序上传到 .Net WCF 时遇到问题。我可以发送文件,但 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");
        }
    }

这是 .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";

}

请发送链接或代码或任何东西。

如果您对此不了解,请对这个问题进行排序。 谢谢

最佳答案

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);
                    }


        }

在 .net 端创建一个接收流的 wcf 方法。 谢谢。

关于android - 将 MS Word 文件从 Android 上传到 .Net WCF?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7860298/

相关文章:

android - 将相机捕获的图像存储在 SQLite 数据库中

wcf - Windows 7 中的 svcutil.exe 在哪里?

python - pycurl请求中的表单数据

javascript - 使用 JQuery、ExpressJS 和 AJAX 更新 MongoDB

android - GLES 3.0 包括 gl2ext.h

android - 为什么 JodaTime 时区会改变日期时间?

c# - 如何通过 WCF 实现继承字典

c# - 使用 POST 的 HttpWebRequest 的性能

android - robotium - 单击操作栏选项卡

c# - 具有 void 返回类型的异常和 WCF 服务