Android - Как передать байт [] в .net Webservice с помощью HttpClient / HttpPost? - PullRequest
0 голосов
/ 15 октября 2010

Как я могу вызвать веб-сервис с параметром byte []? Пробовал использовать именованные пары, но они берут только строки. Я не использую 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 голосов
/ 15 октября 2010

Вы можете преобразовать его в представление base64 и отправить байт [] в виде строки. Затем восстановите его на стороне сервера. На всякий случай, если вы не найдете лучшего подхода.

...