Android - 如何使用HttpClient / HttpPost将byte []传递给.net Webservice?

时间:2010-10-14 21:12:02

标签: android web-services arrays httpclient http-post

如何使用byte []参数调用Webservice?尝试使用namedvaluepairs,但他们只接受字符串。我没有使用Ksoap2,我们决定使用HttpClient / HttpPost方法。

有人有什么想法吗?

这是我的代码:

public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);


    // WORKS WITH JPEG FILE -- String existingFileName = "/sdcard/dcim/Camera/1225231027592.jpg";
    String existingFileName = "/sdcard/dcim/0217175.jpg";
    String mMyFilename = "0217175.jpg";

    //  /sdcard/Music/kryptonite.mp3"; //DOES NOT WORK WITH MP3 FILE

    File uploadFile = new File(existingFileName);
    FileInputStream fileInputStream = null;
    try {
        fileInputStream = new FileInputStream(uploadFile);
    } catch (FileNotFoundException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }



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

    String mTest;
    String Method = null;

    try
    {

        //********************************************************************
        //  Create the HttpClient and the HttpPost
        //      Note:  Need to use HttpPost because of arguments/parameters
        //********************************************************************
        HttpClient client = new DefaultHttpClient();
        HttpPost request = new HttpPost();


        fileInputStream = new FileInputStream(uploadFile);

        // create a buffer of maximum size
        int bytesAvailable = fileInputStream.available();
        int maxBufferSize = 1024;
        int bufferSize = Math.min(bytesAvailable, maxBufferSize);
        byte[] buffer = new byte[bufferSize];

        // read file and write it into form...
        int bytesRead = fileInputStream.read(buffer, 0, bufferSize);

        //*************************************************************
        //Add Value Pairs for Parameters to pass to the Webservice
        //*************************************************************
        List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>(2); 



        //nameValuePairs.add(new BasicNameValuePair(buffer)); 

        nameValuePairs.add(new BasicNameValuePair("filename", mMyFilename)); 






    }
    catch (MalformedURLException ex) {
        // Log.e(Tag, "error: " + ex.getMessage(), ex);
    }
    catch (IOException ioe) {
        String s = "";

        //Log.e(Tag, "error: " + ioe.getMessage(), ioe);
    }
}

}

网络服务:

[WebMethod]
public void PutFile(byte[] buffer, string filename)
{
    string serverpath;

    //serverpath = @"\\63.237.52.201\UploadFiles\Incoming\";
    serverpath = @"C:\Temp\";

    //BinaryWriter binWriter = new BinaryWriter(File.Open(Server.MapPath(filename), FileMode.CreateNew, FileAccess.ReadWrite));
    BinaryWriter binWriter = new BinaryWriter(File.Open(serverpath + filename, FileMode.CreateNew, FileAccess.ReadWrite));
    binWriter.Write(buffer);
    binWriter.Close();
}

1 个答案:

答案 0 :(得分:0)

您可以将其转换为base64表示形式,并将byte []作为字符串发送。然后在服务器端恢复它。以防你没有找到更好的方法。