我正在使用Webview将数据发送到交换邮件服务器。 (http post对于带有大附件的邮件不起作用,因此尝试了这种方法)。
请参阅下面的代码。
如果我发送的数据完全没有编码,发送失败。 如果按照下面的代码执行,我会对整个数据进行编码,但仍然会失败。
如果我尝试注释代码,我将数据存储为名称值对并对其进行编码,收到邮件但没有附件。那么在这里进行编码的正确方法是什么?附件类型是ContentBody。所有其他参数都是字符串。
MultipartEntity entity = new MultipartEntity(HttpMultipartMode.BROWSER_COMPATIBLE,);
entity.addPart("hidid", new StringBody(hidid));
entity.addPart("hidchk", new StringBody(hidchk));
entity.addPart("hidcanary", new StringBody(canary));
entity.addPart("attach", attachment);
ByteArrayOutputStream bytes = new ByteArrayOutputStream();
entity.writeTo(bytes);
String fullUrl = baseUrl + "?ae=Dialog&t=Attach&a=Add";
webView.postUrl(fullUrl, EncodingUtils.getBytes(bytes.toString(),"BASE64"));
/* List<NameValuePair> parameters = new ArrayList<NameValuePair>();
parameters.add(new BasicNameValuePair("hidid", hidid));
parameters.add(new BasicNameValuePair("hidchk", hidchk));
parameters.add(new BasicNameValuePair("hidcanary", canary));
parameters.add(new BasicNameValuePair("attach", attachment.toString()));
UrlEncodedFormEntity entity1 = new UrlEncodedFormEntity(parameters);
String fullUrl = baseUrl + "?ae=Dialog&t=Attach&a=Add";
webView.postUrl(fullUrl, EntityUtils.toByteArray(entity1)); */
我看到Android WebView :: postUrl方法更难编码为“application / x-www-form-urlencoded”。
答案 0 :(得分:1)
尝试将附件转换为
public static String encodeToBase64(String string)
{
String encodedString = "";
try
{
byte[] byteData = null;
if(Build.VERSION.SDK_INT >= 8) // Build.VERSION_CODES.FROYO --> 8
{
byteData = android.util.Base64.encode(string.getBytes(),android.util.Base64.DEFAULT);
}
else
{
byteData = Base64Utility.encode(string.getBytes(),Base64Utility.DEFAULT);
}
encodedString = new String(byteData);
}
catch (Exception e)
{
}
return encodedString;
}
到base64
答案 1 :(得分:0)
bytes.toString()
从您的字节创建一个String。请改用toBytesArray()
来获取字节[]
然后,EncodingUtils使用Charset进行编码。 BASE64不是Charset。 UTF-8是。如果要对字节进行Base64编码,请使用android.util.Base64.encode(byte[]);
在你的例子中:
webView.postUrl(fullUrl, Base64.encode(bytes.toByteArray(), Base64.DEFAULT));
答案 2 :(得分:0)
根据blog post about using MultipartEntity to post data to a url,您可能需要在项目中包含一些其他jar文件。它们包括以下apache开源项目:apache-mime4j,httpclient,httpcore和httpmime。
一旦你这样做,你应该能够使用以下代码作为例子来发布字符串&amp;文件到网址:
HttpClient httpclient = new DefaultHttpClient();
HttpPost httppost = new HttpPost("http://www.tumblr.com/api/write");
try {
MultipartEntity entity = new MultipartEntity();
entity.addPart("type", new StringBody("photo"));
entity.addPart("data", new FileBody(image));
httppost.setEntity(entity);
HttpResponse response = httpclient.execute(httppost);
} catch (ClientProtocolException e) {
} catch (IOException e) {
}