0

我正在尝试上传一些由远程数据库中的应用程序拍摄的照片。要清楚:

  • 我从我的应用程序中吸取了教训
  • 我将 if 发送到 Web 服务(在 .net、svc 文件中编写)
  • WS 将其上传到数据库中

我这样做的方式:我正在发送从图片中恢复的字节[]

String url = MyAddress + "insert_img?login='"
                    + login_result + "'&epc='" + code + "'&title='" + t
                    + "'&image='" + base64EncodedString + "'&descrip='" + d
                    + "'";
            BufferedReader inStream = null;
            System.out.println(url);
            HttpClient httpClient = new DefaultHttpClient();
            HttpGet httpR = new HttpGet(url);
            httpR.setHeader("Accept", "application/json");
            httpR.setHeader("Content-type", "application/json");
            HttpResponse response = httpClient.execute(httpR);

我的问题是我必须压缩很多图片才能发送。图片或 base64EncodedString 字段是这样创建的:

Bitmap thumbnail = (Bitmap) data.getExtras().get("data");

mImageView.setImageDrawable(null);
mImageView.setImageBitmap(thumbnail);
ByteArrayOutputStream baos = new ByteArrayOutputStream();
thumbnail.compress(Bitmap.CompressFormat.JPEG, 1, baos);

byte[] outputByteArray = baos.toByteArray();

base64EncodedString = Base64.encodeToString(outputByteArray, Base64.NO_WRAP + Base64.URL_SAFE);

如您所见,图像非常非常压缩,当我恢复它时,它或多或少是一个 4 色图章。如果我不压缩它很多,图像就不会插入。所以首先:我这样做是不是正确的处理方式?还有,为什么图片太大时没有插入,如果可能的话,如何跟踪错误?

谢谢 !


编辑 :

我已经以这种方式修改了我的代码,服务器端:

public string insert_report(Stream stream)
    {
        string login = "";
        string epc = "";
        string title = "";
        string image = "";
        string descrip = "";
        MultipartParser parser = new MultipartParser(stream);
        Entities entities = new Entities();
        string res = ""; 
        if (parser != null && parser.Success)
        {
            res += parser.Filename;
            foreach (var content in parser.MyContents)
            {
                string name = content.PropertyName;
                string str = Encoding.UTF8.GetString(content.Data);
                res += "name : " + name +"---";
                res += "content : " + str+"---";

                if (name.Contains("login"))
                {
                    login = str;
                }
                if (name.Contains("epc"))
                {
                    epc = str;
                }
                if (name.Contains("title"))
                {
                    title = str;
                }
                if (name.Contains("image"))
                {
                    image = str;
                }
                if (name.Contains("descrip"))
                {
                    descrip = str;
                }
            }
        }
        res+= " res returned by server : "+ entities.insert_report(login, epc, title, image, descrip);
        entities.SaveChanges();
        return res;
    }

但是有一些问题:insert_report 函数返回-1...我如何恢复该函数给出的错误?

4

1 回答 1

2

您是否收到 414(请求 URI 太长)错误?您应该使用 HTTP POST 方法将图像作为 POST 正文上传 - 也不需要 Base64 编码。看看https://stackoverflow.com/a/7632849/2714032

于 2013-08-27T15:20:50.880 回答