/**
*
* sendMultipartDataToHttpServer
* 使用post方法请求web服务器,并且当表单数据为:multipart/form-data格式。http请求使用{@link#HTTP_ENCODING}编码<br/>
* 返回json数据,支持文件名中文上传和多文件上传,不支持断点上传,要正确编码服务端返回{@link#HTTP_ENCODING}编码<br/>
* @param url
* @param files 文件表单域
* @param fields 非文件表单域
* @return JSONObject
* @throws Exception
* @exception
* @since 0
*/
public static JSONObject sendMultipartDataToHttpServer(URL url,
final Map<String, File> files, final Map<String, String> fields,
final UsernamePasswordCredentials credentials) throws IOException ,JSONException,Exception{
URL myurl = null;
String queryString = "";
// 其他的表单域
if (fields != null) {
for (Map.Entry<String, String> entry : fields.entrySet()) {
queryString += "&" + URLEncoder.encode(entry.getKey(),HTTP_ENCODING) + "="
+ URLEncoder.encode(entry.getValue(), HTTP_ENCODING);
}
}
if (!queryString.equals("")) {
queryString = queryString.replaceFirst("&", "?");
} else {
}
myurl = new URL(url.getProtocol(), url.getHost(),url.getPort(), url.getPath()
+ queryString);
HttpURLConnection conn = (HttpURLConnection) myurl.openConnection();
conn.setConnectTimeout(UPLOAD_REQUEST_TIMEOUT);
conn.setRequestMethod(HTTP_METHOD.POST.toString());
conn.setDoInput(true);
conn.setDoOutput(true);
conn.setUseCaches(false);
String boundary = "laohuidi_" + java.util.UUID.randomUUID().toString()
+ "_laohuidi";
conn.setRequestProperty(
"Accept",
"image/gif,image/x-xbitmap,image/jpeg,image/pjpeg,application/vnd.ms-excel,application/vnd.ms-powerpoint,application/msword,application/x-shockwave-flash,application/x-quickviewplus,*/*");
conn.setRequestProperty("keep-alive", "300");
conn.setRequestProperty(
"user-agent",
"Mozilla/0 (Windows; U; Windows NT 2; zh-CN; rv:6) Gecko/20091201 Firefox/6 GTB6");
conn.setRequestProperty("accept-language", "zh-cn,zh;q=5");
conn.setRequestProperty("Connection", "Keep-Alive");
conn.setRequestProperty("Content-Type", "multipart/form-data;boundary="+ boundary);
DataOutputStream dos = new DataOutputStream(conn.getOutputStream());
// 乱码问题 可以试下 PrintWriter out = new PrintWriter(new
// OutputStreamWriter(connection.getOutputStream(),"utf-8"));
dos = new DataOutputStream(conn.getOutputStream());
int bytesRead, bytesAvailable, bufferSize;
byte[] buffer;
int maxBufferSize = IO_BUFFER_SIZE;
String tem = "";
if(files!=null)
for (Map.Entry<String, File> entry : files.entrySet()){
// 分隔符开头
dos.writeBytes(TWO_HYPHENS + boundary + LINEND);
// create a buffer of maximum size
FileInputStream fileInputStream = new FileInputStream(entry.getValue());
bytesAvailable = fileInputStream.available();
bufferSize = Math.min(bytesAvailable, maxBufferSize);
buffer = new byte[bufferSize];
// read file and write it into form...
bytesRead = fileInputStream.read(buffer, 0, bufferSize);
tem = entry.getValue().getName();
dos.writeBytes("Content-Disposition:form-data;name=\""+entry.getKey()+"\";"+ "filename=\"");
dos.writeUTF(tem);// 中文的文件名使用这里
dos.writeBytes("\"" + LINEND);
dos.writeBytes("Content-Type:image/jpg" + LINEND + LINEND);//类型的判断暂时不处理
while (bytesRead > 0) {
dos.write(buffer, 0, bufferSize);
bytesAvailable = fileInputStream.available();
bufferSize = Math.min(bytesAvailable, maxBufferSize);
bytesRead = fileInputStream.read(buffer, 0, bufferSize);
}
// close streams
fileInputStream.close();
dos.writeBytes(LINEND);
}
// http 结束符
dos.writeBytes(TWO_HYPHENS + boundary + TWO_HYPHENS);
dos.writeBytes(LINEND);
dos.flush();
dos.close();
// 返回类型
String responseType = conn.getHeaderField("Content-Type");
// 正常返回而且必须为json类型
if (conn.getResponseCode() == HttpURLConnection.HTTP_OK
&& responseType != null
&& responseType.indexOf(HTTP_JSON_TYPE) >= 0) {
responseType = (convertStreamToString(conn.getInputStream()));
} else {
responseType = "{}";
}
try{conn.disconnect();}catch(Exception e){}
return new JSONObject(responseType);
}
分享到:
相关推荐
ES文件浏览器支持云存储服务的接入,因此源码可能涉及HTTP/HTTPS请求,如使用`OkHttp`或`Volley`库进行网络通信,以及上传下载文件的实现。 8. **SQLite数据库** 应用可能使用SQLite数据库来存储用户的偏好设置、...
在Android开发中,处理视频文件是一项常见的任务,尤其是在创建应用程序时需要上传或处理用户拍摄的视频。本示例“androidstudio视频文件压缩Demo”提供了一个详细的解决方案,它演示了如何在Android Studio项目中...
在Android开发中,当需要传输大文件,如视频、音频或大型数据文件时,传统的HTTP方式可能会遇到性能瓶颈,因为HTTP请求通常不支持断点续传。这时,开发者可以选择使用Socket进行自定义的文件传输,以实现大文件的...
Android SM2、SM3、SM4 算法支持 Service Provider 及证书制作软件包 国密算法 JCAJCE Service Provider,适应版本 Android 4.2.2~7.0 支持 SM2 的 KeyFactory、KeyPairGenerator、Cipher、Signature、X.509 ...
在Android平台上,大文件上传和秒传功能是许多应用程序的核心需求,尤其是在云存储、社交分享和协作工具中。本文将详细解析如何实现“Android大文件上传秒传之在线版”的技术要点。 首先,理解“秒传”功能。秒传是...
5. **多线程处理**:为了提高性能,源代码可能使用`AsyncTask`、`IntentService`或`Worker`来执行耗时的文件操作,比如文件的上传和下载,避免阻塞主线程。 6. **文件选择器**:源代码可能会包含一个文件选择对话框...
- **发送语音**:如果要实现语音发送功能,可以使用网络请求将录音文件上传到服务器,并在接收端下载播放。这通常涉及到HTTP/HTTPS请求,可能需要用到`OkHttp`或`Retrofit`等网络库。 在提供的源码`...
由于x86库文件过大,已分开上传,开发者需要根据设备的处理器架构选择合适的库。 5. **X86架构**:X86是Intel和AMD处理器使用的指令集,通常用在桌面和一些高性能的Android设备上。由于其文件较大,为了方便下载和...
【Android simpl3r 文件上传项目详解】 Android Simpl3r 是一个专为Android平台设计的应用程序,其核心功能是实现文件上传。该项目的源代码提供了一个很好的学习资源,可以帮助开发者理解和实践Android应用中的文件...
本压缩包中的“Android应用源码之Android中Socket大文件断点上传”是一个很好的学习资源,它展示了如何在Android平台上实现通过Socket进行大文件的断点续传功能。这里我们将详细探讨这一主题,包括Socket通信的基本...
3. 调用上传接口:使用七牛提供的UploadManager,选择本地文件并指定上传策略,然后调用start()方法启动上传。 4. 处理上传结果:监听UploadManager的回调,获取上传状态和返回信息,如成功、失败或网络问题。 在...
之前上传过:编译Android下3DES加密算法的.SO文件及源码,地址:http://download.csdn.net/detail/wtbee/6411155。不过其中存在Jni底层资源释放的问题,长时间运行会导致JNI报错使得程序闪退。这一版修改了此Bug。...
Netty 提供了一种更高效的方法,即结合WebSocket和NIO,实现服务器主动推送文件上传进度。 WebSocket 是一种在单个TCP连接上进行全双工通信的协议,它可以提供持久化的连接,使得服务器可以主动向客户端推送数据。...
然后,将补丁文件和新版本的APK元数据(如版本号)上传至服务器。客户端在检测到更新时,下载补丁并应用到本地APK,完成更新。 为了在Android系统中应用bsdiff生成的补丁,还需要一个客户端库来解析和应用补丁。...
在Android中,代码混淆通常是针对Java字节码,它通过重命名类、方法和变量,以及缩短和打乱控制流来使反编译后的代码难以阅读。然而,资源文件混淆则是针对XML布局文件、图片、字符串等资源进行操作,使得攻击者难以...
2. 高效快速:FileUtil类使用了高效的文件操作算法,能够快速地完成文件操作。 3. 广泛应用:FileUtil类可以应用于多种场景,例如文件下载、上传、管理和数据存储等。 五、结论 FileUtil类是一个功能强大且实用的...
在Android平台上,拍照上传图片是一项常见的功能,广泛应用于社交应用、电商、个人日记等场景。这一功能涉及到多个关键步骤和技术,包括相机权限管理、图片捕获、图片处理(如裁剪)以及网络上传。以下是对这些知识...
在Android平台上进行H264视频录制涉及到许多关键知识点,包括多媒体框架、编码技术、文件存储和网络传输等。以下是对这些方面的详细说明: 1. **Android多媒体框架**:Android系统提供了一个强大的多媒体框架,包括...
在Android平台上,批量上传图片至服务器是一项常见的任务,尤其在社交应用、云存储服务或文件共享平台中。本文将深入探讨如何实现这一功能,包括从相册选择图片和使用相机拍摄图片,以及如何构建上传逻辑。 一、...