发送为Base64字符串时无法上传图片

时间:2014-01-31 11:30:49

标签: android asp.net

我正在尝试从android.Here向我们的asp.net webservice发送图像是我的示例代码:

//从图库中获取图像

Uri selectedImage = data.getData();
String[] filePathColumn = { MediaStore.Images.Media.DATA };

Cursor cursor = getContentResolver().query(selectedImage,
                    filePathColumn, null, null, null);
cursor.moveToFirst();

int columnIndex = cursor.getColumnIndex(filePathColumn[0]);
picturePath = cursor.getString(columnIndex);

cursor.close();

/*  BitmapFactory.Options options = new BitmapFactory.Options();
options.inSampleSize = 4;*/

thumbnail = (BitmapFactory.decodeFile(picturePath));
img_photo.setImageBitmap(thumbnail);

//将imag转换为base64字符串

img_photo.buildDrawingCache();
        Bitmap bm = img_photo.getDrawingCache();

        ByteArrayOutputStream baos = new ByteArrayOutputStream();
        bm.compress(Bitmap.CompressFormat.PNG, 100, baos); // bm is the bitmap

        byte[] photo = baos.toByteArray();
        System.out.println("this is byte array" + bytearray);

         String temp_base =Base64.encodeToString(photo,Base64.NO_WRAP);

//调用webservice

SoapObject request = new SoapObject(NAMESPACE, METHOD_NAME);

request.addProperty("CarID", SellCarDetailView.sellcardetails_carid);
request.addProperty("pic",temp_base);
        System.out.println("this is piccontent" +temp_base);
try {

            SoapSerializationEnvelope soapEnvelope = new SoapSerializationEnvelope(
                    SoapEnvelope.VER11);
soapEnvelope.encodingStyle = SoapEnvelope.ENC;
            // new MarshalBase64().register(soapEnvelope);
            soapEnvelope.dotNet = true;
            soapEnvelope.setOutputSoapObject(request);
             HttpTransportSE aht = new HttpTransportSE(URL);
            //AndroidHttpTransport aht = new AndroidHttpTransport(URL);
            aht.call(SOAP_ACTION, soapEnvelope);

            // SoapObject response = (SoapObject)envelope.getResponse();
            SoapPrimitive response = (SoapPrimitive) soapEnvelope.getResponse();
            String temp3 = response.toString();

            Log.v("TAG", temp3);

        } catch (Exception e) {
            e.printStackTrace();
        }

我如何在Web服务端获取“无效参数”。 // Asp.net代码

[ScriptMethod(UseHttpGet = false, ResponseFormat = ResponseFormat.Xml)]
[WebMethod(EnableSession = true)]
public string UploadPictureByCarIDFromAndroid(string CarID, string make, string model, string year, string UserID, string pic, string AuthenticationID, string CustomerID, string SessionID)
{

    string bStatus = "Failed";
    MobileBL objMobile = new MobileBL();
    UsedCarsInfo objCarPicInfo = new UsedCarsInfo();

    try
    {
                  try
            {
                if (AuthenticationID == ConfigurationManager.AppSettings["AppleID"].ToString())
                {
                    objCarPicInfo.Carid = Convert.ToInt32(CarID);
                    byte[] picContent = Convert.FromBase64String(pic);
                    // byte[] picContent = Base64.decode(pic);
                    MemoryStream ms = new MemoryStream(picContent, 0,picContent.Length); // getting "invalid length"
                    ms.Write(picContent, 0, picContent.Length);
                    Bitmap oBitmap1 = new Bitmap(ms);// getting "invalid length" error here
                    // System.Drawing.Image image = System.Drawing.Image.FromStream(ms, true);




                }
            }
            catch (Exception ex)
            {

            }

    }
    catch (Exception ex)
    {
    }


    return bStatus;
}

发送图片时出现“无效长度”错误。非常感谢任何帮助。

1 个答案:

答案 0 :(得分:0)

你可以使用httpmime库上传任何文件(图像,音频,视频等..)请参考下面的代码。

 HttpClient httpClient = new DefaultHttpClient();
HttpContext localContext = new BasicHttpContext();
HttpPost postRequest = new HttpPost(your url);
MultipartEntity reqEntity = new MultipartEntity(
        HttpMultipartMode.BROWSER_COMPATIBLE);

try {




    File file = new File(filename);
    FileBody fileBody = new FileBody(file);
    reqEntity.addPart("video_file", fileBody);

    postRequest.setEntity(reqEntity);
    HttpResponse response = httpClient.execute(postRequest,
            localContext);
    HttpEntity entity = response.getEntity();

    if (entity != null) {
        // entity.consumeContent();
        BufferedReader rd = new BufferedReader(new InputStreamReader(
                entity.getContent()));
        // Log.e("response", "response " + rd.toString());
        String line;
        String result1 = "";
        while ((line = rd.readLine()) != null) {
            result1 = result1 + line;
            // Log.e("result", "line  " + line);




}
        // Log.e("result", "is   " + result1);
        return result1;
    }
} catch (Exception e) {
    return "Exception";
}
return "";

}