Image 改装:在POST@body中上传图像

Image 改装:在POST@body中上传图像,image,post,upload,retrofit,wcf-rest,Image,Post,Upload,Retrofit,Wcf Rest,在几个小时的闲逛和尝试不同的解决方案后,我放弃了,我在寻求一些方向,如果可能的话,举个例子。问题是:我有一个类,它有一个图片atribute。我正在使用改型,希望将图像作为HTTP POST正文的一部分发送,但收到一个错误。大声说出代码和错误 提前感谢您的帮助 POJO类: public class Class1 { @SerializedName("Picture") private Bitmap mPicture; @SerializedName("Giver") public Inte

在几个小时的闲逛和尝试不同的解决方案后,我放弃了,我在寻求一些方向,如果可能的话,举个例子。问题是:我有一个类,它有一个图片atribute。我正在使用改型,希望将图像作为HTTP POST正文的一部分发送,但收到一个错误。大声说出代码和错误

提前感谢您的帮助

POJO类:

public class Class1 {

@SerializedName("Picture")
private Bitmap mPicture;

@SerializedName("Giver")
public Integer mGiver;

public String getPicture() {
    return mPicture;
}

public void setPicture (Bitmap picture) {
    this.mPicture = picture;
}

public String getLaboratory() {
    return mLaboratory;
}

public void setLaboratory(String laboratory) {
    this.mLaboratory = laboratory;
}
    mClass1.setPicture(mImageBitmap);
    mClass1DAO.insertClass1(mClass1, new Callback<Integer>() {
        @Override
        public void success(Integer uid, Response response) {
            mClass1.setUID(uid);
            progressDialog.dismiss();
            Toast.makeText(getApplicationContext(), R.string.msgThankYou, Toast.LENGTH_LONG).show();
            dispatchNavigationDrawerActivity();
        }

        @Override
        public void failure(RetrofitError error) {
            progressDialog.dismiss();
            showErrorDialog(error.getLocalizedMessage());
        }
    });
活动:

public class Class1 {

@SerializedName("Picture")
private Bitmap mPicture;

@SerializedName("Giver")
public Integer mGiver;

public String getPicture() {
    return mPicture;
}

public void setPicture (Bitmap picture) {
    this.mPicture = picture;
}

public String getLaboratory() {
    return mLaboratory;
}

public void setLaboratory(String laboratory) {
    this.mLaboratory = laboratory;
}
    mClass1.setPicture(mImageBitmap);
    mClass1DAO.insertClass1(mClass1, new Callback<Integer>() {
        @Override
        public void success(Integer uid, Response response) {
            mClass1.setUID(uid);
            progressDialog.dismiss();
            Toast.makeText(getApplicationContext(), R.string.msgThankYou, Toast.LENGTH_LONG).show();
            dispatchNavigationDrawerActivity();
        }

        @Override
        public void failure(RetrofitError error) {
            progressDialog.dismiss();
            showErrorDialog(error.getLocalizedMessage());
        }
    });
错误

在调试中,当我打开类并查看属性时,所有属性都是正确的,但图片是错误的

请参见下面的图片信息:

-       Picture {System.Drawing.Bitmap} System.Drawing.Bitmap
+       Flags   '((System.Drawing.Image)(medicineToDonate.Picture)).Flags' threw an exception of type 'System.ArgumentException'    int {System.ArgumentException}
+       FrameDimensionsList '((System.Drawing.Image)(medicineToDonate.Picture)).FrameDimensionsList' threw an exception of type 'System.ArgumentException'  System.Guid[] {System.ArgumentException}
+       Height  '((System.Drawing.Image)(medicineToDonate.Picture)).Height' threw an exception of type 'System.ArgumentException'   int {System.ArgumentException}
等等

当我试图将图片保存到数据库时,代码抛出System.ArgumentException

我错过了什么


提前感谢

这是解决方案,经过3天的尝试。我希望它能节省你的时间。如果它确实节省了你的时间,请给我+1

客户端Android

课程

    namespace DoarMed
{
    [DataContract]
    public class MedicineToDonate
    {
        [DataMember]
        public Int32 UID { get; set; }
        [DataMember]
        public Bitmap Picture { get; set; }
public class MedicineToDonate {
@SerializedName("Picture")
private String mPicture;
@SerializedName("DateTimeInsert")
public Long mDateTimeInsert;

public Bitmap getPicture() {
    return Global.convertStringToBitmap(mPicture);
}

public void setPicture(Bitmap picture) {
    this.mPicture = Global.convertBitmapToString(picture);
}
改装

    mMedicineToDonateDAO.getGiverAllMedicineToDonate(mGlobal.getUserUID(), new Callback<List<MedicineToDonate>>() {
        @Override
        public void success(List<MedicineToDonate> mMedicineToDonateList, Response response) {
            if (mMedicineToDonateList != null) {
                for (int i = 1; i <= mMedicineToDonateList.size(); i++) {
                    mMedicineToDonate = mMedicineToDonateList.get(i - 1);
                    mAdapter.add(mMedicineToDonate);
                }
            }
            progressDialog.dismiss();
            Fragment mFragment = mFragmentManager.findFragmentByTag(Global.OPTION_DONATE);
            FragmentTransaction ft = mFragmentManager.beginTransaction();
            ft.detach(mFragment)
                    .attach(mFragment)
                    .commit();
            mFragmentManager.executePendingTransactions();
        }

        @Override
        public void failure(RetrofitError error) {
            progressDialog.dismiss();
            showErrorDialog(error.getLocalizedMessage());
        }
    });
服务器端(C#/IIS/Postgresql)

全球

    public static String convertBitmapToString(Bitmap imageBitmap){
    ByteArrayOutputStream stream = new ByteArrayOutputStream();
    if(imageBitmap != null) {
        imageBitmap.compress(Bitmap.CompressFormat.JPEG, 100, stream);
        byte[] byteArray = stream.toByteArray();
        return Base64.encodeToString(byteArray, Base64.URL_SAFE);
    }else{
        return null;
    }
}

public static Bitmap convertStringToBitmap (String encodedString) {
    try {
        byte[] data = Base64.decode(encodedString, Base64.URL_SAFE);
        return BitmapFactory.decodeByteArray(data, 0, data.length);
    } catch(Exception e) {
        e.getMessage();
        return null;
    }
}
Class
    [DataContract]
    public class MedicineToDonate
    {
    [DataMember]
    public string Picture { get; set; }
    [DataMember]
    public Int64 DateTimeInsert { get; set; }
    [DataMember]

INSERT:
            NpgsqlParameter addPictureParameter = new NpgsqlParameter("@" + Global.MEDICINETODONATE_COL_picture, NpgsqlDbType.Bytea);
        byte[] byteArrayPicture = Global.convertStringToByteArray(medicineToDonate.Picture);
        addPictureParameter.Value = byteArrayPicture;

SELECT:
        byte [] pictureByteArray = (byte[]) reader[12];
mMedicineToDonate.Picture = Global.convertByteArrayToString(pictureByteArray);
    public static string convertByteArrayToString(byte[] bytes)
    {
        char[] chars = new char[bytes.Length / sizeof(char)];
        System.Buffer.BlockCopy(bytes, 0, chars, 0, bytes.Length);
        return new string(chars);
    }