1、上传文件
Volley是不支持文件上传的,如果我们非要使用Volley支持文件上传,除了前面有一篇文章说明的那样,将文件转换为流之外,还可以扩展Volley的接口。今天,本文要做的就是扩展Volley的接口,让它支持文件的上传。
2、Volley框架图
额,Volley的框架图网上很多了,我找了一张过来,看看就好,这样下面的代码会更加容易理解。
3、文件上传源码
实体类:
import android.text.TextUtils;
import org.apache.http.Header;
import org.apache.http.HttpEntity;
import org.apache.http.message.BasicHeader;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.Closeable;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.util.Random;
/**
* POST报文格式请参考博客 : http://blog.csdn.net/bboyfeiyu/article/details/41863951.
* <p>
* Android中的多参数类型的Entity实体类,用户可以使用该类来上传文件、文本参数、二进制参数,
* 不需要依赖于httpmime.jar来实现上传文件的功能.
*/
public class MultipartEntity implements HttpEntity {
private final static char[] MULTIPART_CHARS = "-_1234567890abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"
.toCharArray();
/**
* 换行符
*/
private final String NEW_LINE_STR = "\r\n";
private final String CONTENT_TYPE = "Content-Type: ";
private final String CONTENT_DISPOSITION = "Content-Disposition: ";
/**
* 文本参数和字符集
*/
private final String TYPE_TEXT_CHARSET = "text/plain; charset=UTF-8";
/**
* 字节流参数
*/
private final String TYPE_OCTET_STREAM = "application/octet-stream";
/**
* 二进制参数
*/
private final byte[] BINARY_ENCODING = "Content-Transfer-Encoding: binary\r\n\r\n".getBytes();
/**
* 文本参数
*/
private final byte[] BIT_ENCODING = "Content-Transfer-Encoding: 8bit\r\n\r\n".getBytes();
/**
* 分隔符
*/
private String mBoundary = null;
/**
* 输出流
*/
ByteArrayOutputStream