我一直在尝试将图像和数据上传到Django服务器.我已经包含apache-mime4j.0.6.jar和httpmime4.0.1.jar库(项目 - >构建路径 - >添加外部jar文件)这里是上传图像的代码.
HttpResponse response = null;
try {
HttpPost httppost = new HttpPost("http://10.0.2.2:8000/mobile");
// HttpPost httppost = new HttpPost("some url");
MultipartEntity multipartEntity = new MultipartEntity(); //MultipartEntity multipartEntity = new MultipartEntity(HttpMultipartMode.BROWSER_COMPATIBLE);
multipartEntity.addPart("name", new StringBody("nameText"));
multipartEntity.addPart("place", new StringBody("placeText"));
multipartEntity.addPart("tag", new StringBody("tagText"));
//multipartEntity.addPart("Description", new StringBody(Settings.SHARE.TEXT));
multipartEntity.addPart("Image", new FileBody(destination));
httppost.setEntity(multipartEntity);
httpclient.execute(httppost, new PhotoUploadResponseHandler());
} catch (Exception e) {
Log.e( "Error","error");
}
Run Code Online (Sandbox Code Playgroud)
错误信息:
Could not find class 'org.apache.http.entity.mime.MultipartEntity'
Run Code Online (Sandbox Code Playgroud)
我尝试手动创建libs文件夹并手动将jar文件包含到/ libs文件夹中.当我这样做它无法编译.
错误:
Conversion to Dalvik format failed …Run Code Online (Sandbox Code Playgroud) 我想在FileBody中发送文件时设置UTF-8编码,就像在StringBuilder中一样.我是这样做的:
restClient.AddEntity("body", new StringBody(body, Charset.forName("UTF-8")));
Run Code Online (Sandbox Code Playgroud)
如果我发送不同于UTF-8消息编码,它可以正常工作.但如果我喜欢这样:
ContentBody fbody = new FileBody(( File )file, "application/octet-stream","UTF-8");
restClient.AddEntity("files[]", fbody);
Run Code Online (Sandbox Code Playgroud)
服务器获取的文件名不是UTF-8.我该如何解决?
我可以使用StringEntity发布json对象
httppost.setEntity(newStringEntity(obj.toString())); HttpResponse response = httpclient.execute(httppost);
但我必须发布一个文件和json数据,我发现很多Answers使用MultipartEntity但它已被弃用,请建议我使用MultipartEntityBuilder的任何教程或示例代码,谢谢
这是我的代码
Thread t = new Thread(new Runnable() {
@Override
public void run() {
JSONObject jsonobject = null;
String requestURL = "URL";
try {
jsonobject = new JSONObject("{\"first\": \"Test\",\"last\": \"User\",\"name\": \"Test
User\",\"email\": \"tr0121345899@gmail.com\",\"birthdate\": \"1984-01-01\",\"Account\": {\"username\": \"t1r0123425899\",\"password\": \"testuser1234567899\"},\"Address\": {\"postal_code\": \"11230\",\"state_or_province\": \"NY\",\"country\": \"US\"}}");
} catch (JSONException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
HttpClient httpclient = new DefaultHttpClient();
HttpPost httppost = new HttpPost(requestURL);
httppost.addHeader("Content-Type", "application/json");
httppost.addHeader("X-ConsumerApiClient","0f8f0a024d6344e429f5ee96aa66fbfb5c3973b5");
httppost.addHeader("X-ConsumerApiSignature",
"qmt8aEAGRQUvldkDnHw8zgn1kRYuXRDwvmo3TpWlCtE=");
MultipartEntityBuilder multipartEntity = MultipartEntityBuilder.create();
multipartEntity.setMode(HttpMultipartMode.BROWSER_COMPATIBLE);
multipartEntity.addPart("file", …Run Code Online (Sandbox Code Playgroud) android json http-post multipartentity apache-httpclient-4.x
我有一个使用标准apache类的客户HTTP调用,但我正在尝试创建一个自定义的Volley类来处理这个问题.这是标准调用的代码:
HttpURLConnection conn = (HttpURLConnection) new URL(strUrl).openConnection();
conn.setDoOutput(true);
conn.setDoInput(true);
conn.setConnectTimeout(30000);
conn.setUseCaches(true);
conn.setRequestMethod("POST");
conn.setRequestProperty("Authorization", "Token " + m_apiKey);
conn.setRequestProperty("Accept", "text/plain , application/json");
conn.setRequestProperty("Connection", "Keep-Alive");
conn.setRequestProperty("Content-Type", "multipart/form-data;boundary=" + strBoundary);
conn.connect();
// **** Start content wrapper:
DataOutputStream request = new DataOutputStream(conn.getOutputStream());
request.writeBytes("\r\n--" + strBoundary + "\r\n");
request.writeBytes("Content-Disposition: form-data; name=\"" + attachmentName + "\";filename=\"" + imageFileName + "\"" + "\r\n");
request.writeBytes("Content-Type: image/jpeg " + "\r\n");
request.writeBytes("\r\n");
request.write(baos.toByteArray());
// **** End content wrapper:
request.writeBytes("\r\n--"+ strBoundary + "--\r\n");
// Flush output buffer:
request.flush();request.close();
Run Code Online (Sandbox Code Playgroud)
不知道怎么做其余的但这是我对Volley的工作不起作用.我之前已经完成了Multipart,但没有使用边界和这种奇怪的格式.
public class …
android multipartform-data boundary multipartentity android-volley
我收到以下错误:
Process: com.project.publiko, PID: 27061
java.lang.NoSuchFieldError: No static field INSTANCE of type Lorg/apache/http/message/BasicHeaderValueFormatter; in class Lorg/apache/http/message/BasicHeaderValueFormatter; or its superclasses (declaration of 'org.apache.http.message.BasicHeaderValueFormatter' appears in /system/framework/ext.jar)
at org.apache.http.entity.ContentType.toString(ContentType.java:153)
at org.apache.http.entity.mime.MultipartFormEntity.<init>(MultipartFormEntity.java:56)
at org.apache.http.entity.mime.MultipartEntityBuilder.buildEntity(MultipartEntityBuilder.java:236)
at org.apache.http.entity.mime.MultipartEntity.getEntity(MultipartEntity.java:119)
at org.apache.http.entity.mime.MultipartEntity.writeTo(MultipartEntity.java:180)
at com.project.publiko.CustomMultipartRequest.getBody(CustomMultipartRequest.java:57)
at com.android.volley.toolbox.HurlStack.addBodyIfExists(HurlStack.java:236)
at com.android.volley.toolbox.HurlStack.setConnectionParametersForRequest(HurlStack.java:210)
at com.android.volley.toolbox.HurlStack.performRequest(HurlStack.java:106)
at com.android.volley.toolbox.BasicNetwork.performRequest(BasicNetwork.java:93)
at com.android.volley.NetworkDispatcher.run(NetworkDispatcher.java:110)
Run Code Online (Sandbox Code Playgroud)
参考错误行(Gradle):
android {
useLibrary 'org.apache.http.legacy'
}
Run Code Online (Sandbox Code Playgroud)
Process: com.project.publiko, PID: 27061
java.lang.NoSuchFieldError: No static field INSTANCE of type Lorg/apache/http/message/BasicHeaderValueFormatter; in class Lorg/apache/http/message/BasicHeaderValueFormatter; or its superclasses (declaration of 'org.apache.http.message.BasicHeaderValueFormatter' appears in /system/framework/ext.jar)
at org.apache.http.entity.ContentType.toString(ContentType.java:153)
at …Run Code Online (Sandbox Code Playgroud) 在我开始之前,我看到了很多关于此的问题,但对我来说没有任何作用,也许有人可以向我解释或显示它如何将位图压缩为 MultiPart 实体,然后使用 Retrofit 将其正确发送到服务器
我在我的Android应用程序中发布了一个XML +图像帖子,MultiPartEntity并且除了我发布的服务器要求我Content-Type将HTTP帖子设置为application/soap+xml; charset="utf-8"
那么如何从中改变它......
POST / HTTP/1.1
Host: 192.168.0.193:1234
User-Agent: Apache-HttpClient/UNAVAILABLE (java 1.4)
Content-Type: multipart/form-data; boundary=XR43mUmjvTb58T7crHhgj83C84qmZO_9k0-s
Content-Length: 28150
Connection: Keep-Alive
--XR43mUmjvTb58T7crHhgj83C84qmZO_9k0-s
...
Run Code Online (Sandbox Code Playgroud)
对此
POST / HTTP/1.1
Host: 192.168.0.193:1234
User-Agent: Apache-HttpClient/UNAVAILABLE (java 1.4)
Content-Type: application/soap+xml; charset="utf-8"
Content-Length: 28150
Connection: Keep-Alive
--XR43mUmjvTb58T7crHhgj83C84qmZO_9k0-s
...
Run Code Online (Sandbox Code Playgroud)
这可能不是发布它的正确方法,但我必须,而不是它将起作用.
我正在传递3张图片MultipartEntity.这很好用,但我不知道如何传递一个String值MultipartEntity.以下是我的代码:
public void executeMultipartPost(Bitmap bm, int i) throws Exception {
try {
ByteArrayOutputStream bos = new ByteArrayOutputStream();
bm.compress(CompressFormat.JPEG, 75, bos);
byte[] data = bos.toByteArray();
HttpClient httpClient = new DefaultHttpClient();
HttpPost postRequest = new HttpPost("http://www.3dsoles.com/droidapp/index.php");
ByteArrayBody bab = new ByteArrayBody(data, "image" + i + ".jpg");
// File file= new File("/mnt/sdcard/forest.png");
// FileBody bin = new FileBody(file);
MultipartEntity reqEntity = new MultipartEntity(
HttpMultipartMode.BROWSER_COMPATIBLE);
reqEntity.addPart("file", bab);
// reqEntity.addPart("userID", Constants.mUserImei);
reqEntity.addPart("photoCaption", new StringBody("sfsdfsdf"));
postRequest.setEntity(reqEntity);
HttpResponse response = httpClient.execute(postRequest); …Run Code Online (Sandbox Code Playgroud) android httpclient http-post image-uploading multipartentity
我在MultipartEntity中使用,我正在尝试引用raw文件夹中的文件.这是代码:
MultipartEntity reqEntity = new MultipartEntity();
reqEntity.addPart(new FormBodyPart("file", new FileBody(new File("test.txt"))));
Run Code Online (Sandbox Code Playgroud)
test.txt文件位于我的res/raw文件夹中.当我执行代码时,我得到以下异常:FileNotFoundException:/test.txt:open failed:ENOENT(没有这样的文件或目录)
谁能帮我这个?
我尝试过以下链接,但没有一个帮助解决问题.
这是代码
HttpClient httpClient = new DefaultHttpClient();
HttpPost httpPost = new HttpPost(Utility.AddProductWS);
MultipartEntityBuilder multipartBuilder = MultipartEntityBuilder.create();
/* example for setting a HttpMultipartMode */
multipartBuilder.setMode(HttpMultipartMode.BROWSER_COMPATIBLE);
for (int i = 0; i < photos.size(); i++) {
multipartBuilder.addBinaryBody("images[]", newFile(photos.get(i).getImagePath());
}
multipartBuilder.addTextBody("username", username.toString());
multipartBuilder.addTextBody("accept_best_offer", String.valueOf(acceptOffer.isChecked() ? 1 : 0));
multipartBuilder.addTextBody("accept_trade", String.valueOf(acceptTrade.isChecked() ? 1 : 0));
multipartBuilder.addTextBody("product_price", etProductPrice.getText().toString());
multipartBuilder.addTextBody("product_description", etProductDescription.getText().toString());
HttpEntity httpEntity = multipartBuilder.build();
httpPost.setEntity(httpEntity); // Error line
HttpResponse response = httpClient.execute(httpPost);
Utility.showLog(TAG, EntityUtils.toString(response.getEntity()));
Run Code Online (Sandbox Code Playgroud)
错误
引起:java.lang.NoSuchFieldError:没有静态字段INSTANCE类型为Lorg/apache/http/message/BasicHeaderValueFormatter; 在类Lorg/apache/http/message/BasicHeaderValueFormatter中; 或其超类('org.apache.http.message.BasicHeaderValueFormatter'的声明出现在/system/framework/ext.jar中)
我正在使用httpcore-4.4.1和httpmime-4.4.1库文件.
android ×10
multipartentity ×10
http-post ×2
httpclient ×2
apache ×1
bitmap ×1
boundary ×1
dalvik ×1
django ×1
file-upload ×1
httprequest ×1
java ×1
json ×1
retrofit2 ×1