2013-02-21 70 views
2

我在wcf端遇到问题,而我正在将doc文件从android发送到wcf服务。问题是,当在wcf端打开上传的文件时,doc文件的内容是一些不可读的文本。下面是代码: WCF代码将文件从android上传到wcf服务

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"; 

Android的代码

package com.example.filedemo; 


import java.io.File; 
import java.io.IOException; 

import org.apache.http.HttpResponse; 
import org.apache.http.client.ClientProtocolException; 
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.impl.client.DefaultHttpClient; 
import org.apache.http.params.BasicHttpParams; 
import org.apache.http.params.HttpParams; 
import org.apache.http.params.HttpProtocolParams; 
import org.apache.http.protocol.HTTP; 

import android.os.Environment; 

public class HttpUpload { 

    public static int res ; 

    public void myUploadedfile(){ 


     try { 

      HttpParams httpParameters = new BasicHttpParams(); 
      HttpProtocolParams.setContentCharset(httpParameters, HTTP.UTF_8); 
      HttpProtocolParams.setHttpElementCharset(httpParameters, HTTP.UTF_8); 
      HttpClient httpclient = new DefaultHttpClient(httpParameters); 


      HttpPost httpost = new HttpPost("http://10.160.0.18:85/Service.svc/UploadImage?fn=abc.doc"); 
      httpost.setHeader("Content-type","application/octet-stream"); 

      MultipartEntity entity = new MultipartEntity(); 
      entity.addPart("fileContents", new FileBody(new File(Environment.getExternalStorageDirectory(),"abc.doc"))); 


      httpost.setEntity(entity); 
      HttpResponse response; 

      response = httpclient.execute(httpost); 

      System.out.println("Response : "+response.getStatusLine().getStatusCode()); 

      res = response.getStatusLine().getStatusCode(); 


     } catch (ClientProtocolException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 

     } catch (IOException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 

     }catch (Exception e) { 

      e.printStackTrace(); 
      System.out.println("Error: "+ e.getMessage()); 
      // TODO: handle exception 
     } 

    } 

} 

请回复很快。

感谢

回答

0

逻辑在WCF似乎不正确,请尝试以下修改:

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

byte[] bytearray = new byte[10000]; 
int bytesRead, totalBytesRead = 0; 

while((bytesRead = mystream.Read(bytearray)) > 0) 
{  
    fileToupload.Write(bytearray, 0, bytesRead); // Write directly to the file 
    totalBytesRead += bytesRead; 
} 


fileToupload.Close(); 
fileToupload.Dispose(); 
+0

嘿感谢你的帮助....当我上传DOC,XLS等它工作正常...但你能告诉我,如果我要上传一个视频或音频文件.. ????大小将是无限的或高达3至4 GB? – 2013-02-21 10:03:09

+0

它应该是相同的,但您需要使用更大的缓冲区大小,并在连接失败的情况下支持“上传简历”。 – iTech 2013-02-21 21:31:09

+0

感谢您的回复。但仍然存在的问题是,当我上传的视频文件上传但未打开时,我尝试打开所有播放器,例如媒体播放器,vlc播放器等,但未打开。等待回复.....预先感谢 – 2013-02-22 05:53:41