实战 QQ demo源码(本例中有该应用)
服务器端下载:http://download.csdn.net/download/knight_black_bob/9822551
android eclipse 版:http://download.csdn.net/download/knight_black_bob/9822553
android stdio 版本:http://download.csdn.net/download/knight_black_bob/9822556
android volley ,多文件 表单上传 后台实现 http://knight-black-bob.iteye.com/blog/2311807
public static void createFeed( FeedEntity feed, List<File> files){ final Map<String, String> params = new HashMap<String, String>(); params.put("userFrom", feed.getUserFrom()+""); params.put("userNickname", feed.getUserNickname()); params.put("userIcon", feed.getUserIcon()); params.put("content", feed.getContent()); final Map<String, File> filemap = new HashMap<String, File>(); for (File file : files) { filemap.put("f_file[]", file); } String url = Constants.url_feed_create; MultipartRequest request = new MultipartRequest(url, new Listener<String>() { @Override public void onResponse(String response) { TrendCreateHttpManager.toTrendCreateHttpActionSuccess(); } },new ErrorListener() { @Override public void onErrorResponse(VolleyError error) { TrendCreateHttpManager.toTrendCreateHttpActionError(); } } , "f_file[]", files, params); Volley.newRequestQueue(MyApplication.newInstance()).add(request); }
volley MultipartRequest
package com.curiousby.fitnessandappointment.quote.volley; import android.util.Log; import com.android.volley.AuthFailureError; import com.android.volley.NetworkResponse; import com.android.volley.Request; import com.android.volley.Response; import com.android.volley.VolleyLog; import com.android.volley.toolbox.HttpHeaderParser; import org.apache.http.entity.mime.MultipartEntity; import org.apache.http.entity.mime.content.FileBody; import org.apache.http.entity.mime.content.StringBody; import java.io.ByteArrayOutputStream; import java.io.File; import java.io.IOException; import java.io.UnsupportedEncodingException; import java.nio.charset.Charset; import java.util.ArrayList; import java.util.Collections; import java.util.HashMap; import java.util.List; import java.util.Map; /** * 功能: * * @author yanzi E-mail: yanzi1225627@163.com * @version 创建时间: 2015-08-09 下午4:32 */ public class MultipartRequest extends Request<String>{ private MultipartEntity entity = new MultipartEntity(); private Response.Listener<String> mListener; private List<File> mFileParts; private String mFilePartName; private Map<String, String> mParams; /** * 单个文件+参数 上传 * @param url * @param listener * @param errorListener * @param filePartName * @param file * @param params */ public MultipartRequest(String url, Response.Listener<String> listener, Response.ErrorListener errorListener, String filePartName, File file, Map<String, String> params){ super(Method.POST, url, errorListener); mFileParts = new ArrayList<File>(); if(file != null && file.exists()){ mFileParts.add(file); }else{ VolleyLog.e("MultipartRequest---file not found"); } mFilePartName = filePartName; mListener = listener; mParams = params; buildMultipartEntity(); } /** * 多个文件+参数上传 * @param url * @param listener * @param errorListener * @param filePartName * @param files * @param params */ public MultipartRequest(String url,Response.Listener<String> listener,Response.ErrorListener errorListener , String filePartName,List<File> files, Map<String, String> params) { super(Method.POST, url, errorListener); mFilePartName = filePartName; mListener = listener; mFileParts = files; mParams = params; buildMultipartEntity(); } @Override protected Response<String> parseNetworkResponse(NetworkResponse response) { String parsed; try { parsed = new String(response.data, HttpHeaderParser.parseCharset(response.headers)); } catch (UnsupportedEncodingException e) { parsed = new String(response.data); } return Response.success(parsed, HttpHeaderParser.parseCacheHeaders(response)); } @Override protected void deliverResponse(String response) { mListener.onResponse(response); } @Override public Map<String, String> getHeaders() throws AuthFailureError { Map<String, String> headers = super.getHeaders(); if (headers == null || headers.equals(Collections.emptyMap())) { headers = new HashMap<String, String>(); } return headers; } @Override public String getBodyContentType() { return entity.getContentType().getValue(); } @Override public byte[] getBody() throws AuthFailureError { ByteArrayOutputStream bos = new ByteArrayOutputStream(); try{ entity.writeTo(bos); } catch (IOException e) { VolleyLog.e("IOException writing to ByteArrayOutputStream"); } return bos.toByteArray(); } private void buildMultipartEntity() { if (mFileParts != null && mFileParts.size() > 0) { for (File file : mFileParts) { entity.addPart(mFilePartName, new FileBody(file)); } long l = entity.getContentLength(); Log.i("YanZi-volley", mFileParts.size() + "个,长度:" + l); } try { if (mParams != null && mParams.size() > 0) { for (Map.Entry<String, String> entry : mParams.entrySet()) { entity.addPart( entry.getKey(), new StringBody(entry.getValue(), Charset .forName("UTF-8"))); } } } catch (UnsupportedEncodingException e) { VolleyLog.e("UnsupportedEncodingException"); } } }
捐助开发者
在兴趣的驱动下,写一个免费
的东西,有欣喜,也还有汗水,希望你喜欢我的作品,同时也能支持一下。 当然,有钱捧个钱场(右上角的爱心标志,支持支付宝和PayPal捐助),没钱捧个人场,谢谢各位。
谢谢您的赞助,我会做的更好!
相关推荐
首先,我们需要理解Volley的基本工作原理以及如何构建一个表单数据请求来实现文件上传。 ### 1. Volley介绍 Volley是由Google开发的网络库,它设计的目标是快速、简单地处理网络请求。Volley提供了异步请求处理、...
本文将深入探讨如何使用Volley实现文件上传到服务器,主要关注通过表单方式提交文件的核心知识点。 首先,理解文件上传的基本原理至关重要。在HTTP协议中,文件上传通常涉及到`POST`请求和`multipart/form-data`...
本文将详细介绍如何在Android中实现表单上传文件,尤其是图片文件。 首先,理解表单上传的基本原理。在Web开发中,HTML的`<form>`标签可以设置`enctype="multipart/form-data"`来支持文件上传。但在Android中,由于...
表单上传是一种常见的方法,通过Multipart/form-data格式将文件数据与表单字段一起发送。这种方式允许我们同时上传文本信息和二进制文件。 二、Multipart/form-data Multipart/form-data是HTTP请求中的一种内容类型...
一个项目中用到的使用Volley上传头像文件的例子,供大家参考,具体内容如下 /** * Created by wangshihui on 2015/11/30. * 上传文件 * url:..... method:post 参数:file 接口给的参数:file 就是表单的...
虽然 Volley 在许多场景下表现出色,但也有其局限性,如对大型文件下载或上传的支持不够完善。对此,可以结合其他库如 OkHttp 或 Retrofit 进行扩展。此外,对于复杂的网络请求逻辑,可以考虑使用 RxJava 将请求转换...
以上就是使用Volley通过多部分表单上传文件到腾讯云的基本流程。在实际操作中,你需要根据腾讯云的API文档调整请求URL、参数名、文件类型以及API密钥等相关信息。同时,为了提高用户体验,可以考虑在上传过程中显示...
然而,当涉及到文件上传,特别是大文件时,Volley的默认行为可能会导致内存问题,因为它会一次性加载整个文件到内存中。为了解决这个问题,并提供文件上传进度的反馈,我们可以对Volley进行扩展。 在Android 2.3及...
综上所述,这个资源提供了基于 Volley 的文件上传解决方案,通过自定义的 `MultipartRequest` 类,开发者可以轻松地在 Android 应用中实现文件,尤其是图片的上传功能。同时,需要注意在实际应用中,还需要考虑性能...
在Android平台上将文件上传到.NET服务器是一项常见的任务,涉及到客户端(Android)与服务器端(.NET)的交互。本文将详细讲解如何实现这一过程,并提供相关的代码示例。 首先,客户端(Android)需要使用HTTP或者...
对于图片上传,Volley提供了一个名为`MultipartRequest`的类,用于处理HTTP的多部分表单数据,这是上传图片时常用的方式。 1. **创建MultipartRequest** 在Volley中,`MultipartRequest`并不是内置的类,但我们...
在Android平台上,图片文件的上传是一项常见的任务,尤其在开发社交、电商或者任何涉及用户交互的应用时。这个过程涉及到文件的读取、网络通信以及数据的序列化等关键环节。以下将详细介绍如何在Android中实现图片...
在Android客户端,我们可以使用`HttpURLConnection`或第三方库如Volley、Retrofit等实现文件上传。下面以`HttpURLConnection`为例: 1. **创建HTTP连接** 首先,你需要建立一个到服务器的HTTP连接。这可以通过`URL...
为了上传图片,可以使用`StringRequest`或自定义的`MultipartRequest`,后者允许我们发送文件和其他数据作为表单的一部分。 1. **图片下载**: ```java ImageLoader imageLoader = new ImageLoader(queue, new ...
1. 创建一个`MultipartEntityBuilder`实例,用来构建多部分表单数据,包含文件内容。 2. 添加文件到实体中,使用`addBinaryBody`方法,传入文件名和文件输入流。 3. 设置请求头,如`Content-Type`为`multipart/form-...
总之,Android的文件上传和下载涉及网络请求、多线程、数据解析等多个方面,开发者需要对这些技术有深入理解才能实现稳定、高效的文件交互功能。通过学习和实践,你将能够熟练地在Android应用中实现文件的上传下载,...
在Android平台上,文件上传是一项...总之,Android文件上传涉及多个环节,包括文件操作、网络请求和数据封装。开发者应根据项目需求选择合适的上传方法,并注意处理可能出现的问题,以确保上传功能的稳定性和用户体验。
总的来说,Android中的文件上传涉及到HTTP协议的理解,特别是POST请求和多部分表单数据的构造。在实际应用中,通常会使用库如Retrofit、Volley或OkHttp等来简化这一过程,而不是手动编写网络请求的细节。这些库提供...
将Volley的相关操作封装成一个库,下载文件包含Volley工具库和一个使用实例,下载之后直接使用Android studio打开VolleyTest即可(完整项目,不需要导入);文件上传使用的是自己实现的servlet服务器,所以将服务端...