简体   繁体   English

Android-如何使用HttpClient / HttpPost将byte []传递到.net Web服务?

[英]Android - How do you pass a byte[] to a .net Webservice using HttpClient / HttpPost?

How can I call a Webservice with a byte[] parameter? 如何使用byte []参数调用Web服务? Tried using the namedvaluepairs, but they take strings only. 尝试使用namedvaluevaluespairs,但它们仅采用字符串。 I am not using the Ksoap2, we decided to use the HttpClient / HttpPost method. 我没有使用Ksoap2,我们决定使用HttpClient / HttpPost方法。

Anyone have any ideas? 有人有想法么?

Here is my code: 这是我的代码:

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

} }

The Web Service: Web服务:

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

You could convert it to a base64 representation and send the byte[] as an string. 您可以将其转换为base64表示形式,然后将byte []作为字符串发送。 Then recover it at the server side. 然后在服务器端恢复它。 Just in case you don't find a better approach. 以防万一您找不到更好的方法。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM