我想使用http Post将图像从Android客户端发送到Django服务器.图像是从 gallery 中挑选出来的.目前,我正在使用列表值名称对将必要的数据发送到服务器,并在JSON中接收来自Django的响应.是否可以对图像使用相同的方法(将图像的URL嵌入到JSON响应中)?

另外,哪种方法更好:远程访问图像,而无需从服务器下载图像,或者下载图像并将其存储在位图数组中,然后在本地使用它们?图像数量少(<10)且尺寸小(50*50).

任何有关撞击这些问题的教程都将不胜感激.

编辑:从图库中 Select 的图片在zoom 到所需大小后发送到服务器.

推荐答案

我假设您知道要上传的图像的路径和文件名.使用image作为键名将此字符串添加到NameValuePair.

发送图像可以使用HttpComponents libraries.下载最新的HttpClient(目前是4.0.1)二进制依赖项包,将apache-mime4j-0.6.jarhttpmime-4.0.1.jar复制到项目中,并将它们添加到Java构建路径中.

您需要向类中添加以下导入.

import org.apache.http.entity.mime.HttpMultipartMode;
import org.apache.http.entity.mime.MultipartEntity;
import org.apache.http.entity.mime.content.FileBody;
import org.apache.http.entity.mime.content.StringBody;

现在,您可以创建一个MultipartEntity,将图像附加到POST请求中.以下代码显示了如何执行此操作的示例:

public void post(String url, List<NameValuePair> nameValuePairs) {
    HttpClient httpClient = new DefaultHttpClient();
    HttpContext localContext = new BasicHttpContext();
    HttpPost httpPost = new HttpPost(url);

    try {
        MultipartEntity entity = new MultipartEntity(HttpMultipartMode.BROWSER_COMPATIBLE);

        for(int index=0; index < nameValuePairs.size(); index++) {
            if(nameValuePairs.get(index).getName().equalsIgnoreCase("image")) {
                // If the key equals to "image", we use FileBody to transfer the data
                entity.addPart(nameValuePairs.get(index).getName(), new FileBody(new File (nameValuePairs.get(index).getValue())));
            } else {
                // Normal string data
                entity.addPart(nameValuePairs.get(index).getName(), new StringBody(nameValuePairs.get(index).getValue()));
            }
        }

        httpPost.setEntity(entity);

        HttpResponse response = httpClient.execute(httpPost, localContext);
    } catch (IOException e) {
        e.printStackTrace();
    }
}

我希望这能帮助您朝着正确的方向前进.

Android相关问答推荐

view喷气背包中找不到模型组成

如何将文本相对于喷气背包中的图标垂直居中?

房间打开创建回调java.nio.channels. OverlappingFilLockResponse

我遇到了一个HashMaps对象没有存储在Firebase数据库中的问题.HashMap的一个对象put方法未被存储

如何制作带有图标和文本的Fab

Android Compose Pages 3-一次加载所有页面,无需在LazyColumn中滚动,无需网络调用和内部滚动

房间@嵌入式VS一对一关系

从安卓S原生库的资源中读取json文件

在柯特林连续测量网速

activity在 Runnable 中如何工作?我的 Android 表格未显示

为什么第二个代码可以安全地在 map 中进行网络调用,因为它已被缓存?

如何使用滑行加载媒体的专辑封面?

Jetpack Compose 如何使一个项目相对于另一个项目垂直居中

在 kotlin 中动态添加 GridView

我怎样才能在多行 TextView 旁边有一个 ImageView 并且不超过父级的限制?

React-native 3D对象渲染

IconButton 中可绘制的图标是黑色的,尽管它是白色的

Google Play 控制台您的应用是否使用广告 ID?

Android全屏AlertDialog

Android Studio (Kotlin):无法启动活动