上传图片/文件到server
package yao.camera.util;
import java.io.ByteArrayOutputStream;
import java.io.DataOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import android.graphics.Bitmap;
import android.text.TextUtils;
/**
* @author wuxifu 图片/文件的上传: Content-Type: multipart/form-data;
* boundary=---------------------------114556938680 Content-Length: 210
*
* -----------------------------114556938680 Content-Disposition:
* form-data; name="fileName"; filename="wuxifu.txt" Content-Type:
* text/plain
*
* hello how doyou do -----------------------------114556938680--
*
*
*/
public class UploadUtils {
public static final String IMAGE_TYPE_PNG = "PNG";
public static final String IMAGE_TYPE_JPG = "JPG";
public static final String end = "\r\n";
public static final String twoHyphens = "--";
public static final String boundary = "*****";
private String url;
private String fileNameKey;
/**
* @param url
* @param fileNameKey
* name="fileName"之fileName即为fileNameKey,这个取决于后台开发人员的习惯)<form
* action="uploadFile.php" method="post"
* enctype="multipart/form-data"> <input type="file"
* name="fileName"> <input type="submit" value="上传文件"> </form>
*
*/
public UploadUtils(String url, String fileNameKey) {
super();
this.url = url;
this.fileNameKey = fileNameKey;
}
/**
* @param bitmap
* @param imageType PNG JPG
* @param mFileName hello.jpg hello.png 须要扩展名
* @param iUpload
*/
public synchronized void uploadBitmap(Bitmap bitmap, String imageType,String mFileName ,IUpload iUpload) {
try {
URL url2 = new URL(url);
HttpURLConnection con = (HttpURLConnection) url2.openConnection();
/* 同意Input、Output,不使用Cache */
con.setDoInput(true);
con.setDoOutput(true);
con.setUseCaches(false);
/* POST方法 */
con.setRequestMethod("POST");
/* setRequestProperty */
con.setRequestProperty("Connection", "Keep-Alive");
con.setRequestProperty("Charset", "UTF-8");
con.setRequestProperty("Content-Type",
"multipart/form-data;boundary=" + boundary);
DataOutputStream ds = new DataOutputStream(con.getOutputStream());
ds.writeBytes(twoHyphens + boundary + end);
ds.writeBytes("Content-Disposition: form-data; " + "name=\""
+ fileNameKey + "\";filename=\"" + mFileName + "\"");
ds.writeBytes(end);// 换行
// 图片类型的确定
if (!TextUtils.isEmpty(imageType)
&& imageType.equals(IMAGE_TYPE_PNG)) {
ds.writeBytes("Content-Type:image/png");
} else {
ds.writeBytes("Content-Type:image/jpeg");
}
ds.writeBytes(end + end);
ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
// 压缩类型的确定
if (!TextUtils.isEmpty(imageType)
&& imageType.equals(IMAGE_TYPE_PNG)) {
bitmap.compress(Bitmap.CompressFormat.PNG, 100,
byteArrayOutputStream);
} else {
bitmap.compress(Bitmap.CompressFormat.JPEG, 100,
byteArrayOutputStream);
}
byte[] byteArray = byteArrayOutputStream.toByteArray();
ds.write(byteArray);
ds.writeBytes(end + end);
ds.writeBytes(twoHyphens + boundary + twoHyphens + end);
/* close streams */
byteArrayOutputStream.close();
ds.flush();
/* 获取提交数据后server返回的内容 */
InputStream is = con.getInputStream();
StringBuffer b = new StringBuffer();
int length = 0;
byte[] buffer = new byte[1024];
while ((length = is.read(buffer)) != -1) {
b.append(new String(buffer, 0, length));
}
/* success */
iUpload.uploadSuccess(b.toString());
/* close */
ds.close();
} catch (Exception e) {
iUpload.uploadFailed(e.toString());
}
}
/**
* @param file 上传文件
* @param iUpload
*/
public synchronized void uploadFile(File file, IUpload iUpload) {
try {
URL url2 = new URL(url);
HttpURLConnection con = (HttpURLConnection) url2.openConnection();
/* 同意Input、Output,不使用Cache */
con.setDoInput(true);
con.setDoOutput(true);
con.setUseCaches(false);
/* post方法*/
con.setRequestMethod("POST");
/* setRequestProperty */
con.setRequestProperty("Connection", "Keep-Alive");
con.setRequestProperty("Charset", "UTF-8");
con.setRequestProperty("Content-Type",
"multipart/form-data;boundary=" + boundary);
DataOutputStream ds = new DataOutputStream(con.getOutputStream());
ds.writeBytes(twoHyphens + boundary + end);
ds.writeBytes("Content-Disposition: form-data; " + "name=\""
+ fileNameKey + "\";filename=\"" + file.getName() + "\"");
ds.writeBytes(end+end);
FileInputStream fStream = new FileInputStream(file);
int bufferSize = 1024;
byte[] buffer = new byte[bufferSize];
int length = -1;
while ((length = fStream.read(buffer)) != -1) {
ds.write(buffer, 0, length);
ds.flush();
}
ds.writeBytes(end + end);
ds.writeBytes(twoHyphens + boundary + twoHyphens + end);
/* close streams */
fStream.close();
ds.flush();
/* 获取提交数据后server返回的内容*/
InputStream is = con.getInputStream();
StringBuffer b = new StringBuffer();
while ((length = is.read(buffer)) != -1) {
b.append(new String(buffer, 0, length));
}
/* success */
iUpload.uploadSuccess(b.toString());
/*close */
ds.close();
} catch (Exception e) {
iUpload.uploadFailed(e.toString());
}
}
public interface IUpload {
void uploadSuccess(String message);
void uploadFailed(String message);
}
}
上传图片/文件到server的更多相关文章
- [Ajax] 使用Ajax异步上传图片文件(非Form表单提交)
通过表单Form提交来上传文件的方式这里就不说了: 下面介绍,通过js中使用ajax异步上传图片文件: 新建一个html页面和一个一般处理程序即可: 涉及思路: //发送2次Ajax请求完成js异步上 ...
- 利用webuploader插件上传图片文件,完整前端示例demo,服务端使用SpringMVC接收
利用WebUploader插件上传图片文件完整前端示例demo,服务端使用SpringMVC接收 Webuploader简介 WebUploader是由Baidu WebFE(FEX)团队开发的一 ...
- php上传图片文件常用的几个方法
1. 前台 <form class="add-form" method="post" action="/person/save" en ...
- 利用Spring MVC 上传图片文件
本文转自:http://amcucn.iteye.com/blog/264457.感谢作者 近日在工作当中,需要用到上传图片的功能,然而自己平时学习的时候只会使用struts的上传功能,但因为项目并没 ...
- html+php上传图片文件到服务器
html+php上传图片文件到服务器 一.html代码 <body> <form action="" method="post" enctyp ...
- 工作笔记4.struts2上传文件到server
本文介绍两种:上传文件到server的方式 一种是提交Form表单:还有一种是ajaxfileupload异步上传. 一.JSP中: 1.提交Form表单 为了能完毕文件上传,我们应该将这 ...
- Android端通过HttpURLConnection上传文件到server
Android端通过HttpURLConnection上传文件到server 一:实现原理 近期在做Androidclient的应用开发,涉及到要把图片上传到后台server中.自己选择了做Sprin ...
- ajax上传图片文件
这里用的是一个隐藏的iframe,这样可以让form表单提交到这个iframe里面,用户就看不到页面的刷新了 前段时间在解决ajax上传文件时折腾了好一阵.直接用$.post上传文本信息肯定是没有问题 ...
- ionic新手教程第三课-在项目中使用requirejs分离controller文件和server文件
继上篇教程中提到的,我们新建一个简单的tabs类型的Ionic项目. 依据文件夹文件我们知道,系统自己主动创建了一个controller文件和server文件,而且把全部的控制器和服务都写到这两个文件 ...
随机推荐
- day03_01 Python历史、32bit和64bit系统的区别
先看一下讲师的笔记,有python介绍 在python2.6版本之后,想清理一些东西,追求简单明了,就直接升级到了python3.0 但是python3.0导致很多企业都不更新,因为有很多企业的网站代 ...
- Codeforces Round #412 Div. 2 第一场翻水水
大半夜呆在机房做题,我只感觉智商严重下降,今天我脑子可能不太正常 A. Is it rated? time limit per test 2 seconds memory limit per test ...
- 在Asp.net MVC中添加一个全局的异常处理的过滤器及Log4Net的使用
1:捕获异常新建一个异常处理的类MyExceptionAttribute捕获异常信息. //写到日志中.多个线程同时操作一个文件,造成文件的并发,这时用队列 public static Queue&l ...
- hibernate延迟加载之get和load的区别
在hibernate中我们知道如果要从数据库中得到一个对象,通常有两种方式,一种是通过session.get()方法,另一种就是通过session.load()方法,然后其实这两种方法在获得一个实体对 ...
- hihoCoder #1047 Random Tree
题意 给出点数为 $n$($n \le 1000$)的完全图 $K_n$,带边权.随机出 $K_n$ 的一棵生成树 $T$.求 $T$ 上任意两点间距离的期望. 解法 固定两点 $u$.$v$($u ...
- BZOJ 4552 [Tjoi2016&Heoi2016]排序 ——线段树 二分答案
听说是BC原题. 好题,二分答案变成01序列,就可以方便的用线段树维护了. 然后就是区间查询和覆盖了. #include <map> #include <cmath> #inc ...
- [luoguP1640] [SCOI2010]连续攻击游戏(二分图最大匹配)
传送门 我们将每一个属性和物品连边,然后枚举从小到大属性跑匈牙利,直到找不到连边 #include <cstdio> #include <cstring> #include & ...
- bzoj3207花神的嘲讽计划Ⅰ
题意:http://www.lydsy.com/JudgeOnline/problem.php?id=3207 给定一个原字符串和m个询问,每次查询原字符串[l,r]内是否包含给定字符串s (len( ...
- hdu 2999 sg函数(简单博弈)
Stone Game, Why are you always there? Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/ ...
- iis 配置 aspnet起始页
起始页配置:在default document上面加上路径就可以了,例如 /home/kickoffjob asp.net 关于起始页的一般设置: 1: 在web.config中,加入form认证: ...