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的更多相关文章

  1. [Ajax] 使用Ajax异步上传图片文件(非Form表单提交)

    通过表单Form提交来上传文件的方式这里就不说了: 下面介绍,通过js中使用ajax异步上传图片文件: 新建一个html页面和一个一般处理程序即可: 涉及思路: //发送2次Ajax请求完成js异步上 ...

  2. 利用webuploader插件上传图片文件,完整前端示例demo,服务端使用SpringMVC接收

    利用WebUploader插件上传图片文件完整前端示例demo,服务端使用SpringMVC接收 Webuploader简介   WebUploader是由Baidu WebFE(FEX)团队开发的一 ...

  3. php上传图片文件常用的几个方法

    1. 前台 <form class="add-form" method="post" action="/person/save" en ...

  4. 利用Spring MVC 上传图片文件

    本文转自:http://amcucn.iteye.com/blog/264457.感谢作者 近日在工作当中,需要用到上传图片的功能,然而自己平时学习的时候只会使用struts的上传功能,但因为项目并没 ...

  5. html+php上传图片文件到服务器

    html+php上传图片文件到服务器 一.html代码 <body> <form action="" method="post" enctyp ...

  6. 工作笔记4.struts2上传文件到server

    本文介绍两种:上传文件到server的方式   一种是提交Form表单:还有一种是ajaxfileupload异步上传. 一.JSP中:     1.提交Form表单 为了能完毕文件上传,我们应该将这 ...

  7. Android端通过HttpURLConnection上传文件到server

    Android端通过HttpURLConnection上传文件到server 一:实现原理 近期在做Androidclient的应用开发,涉及到要把图片上传到后台server中.自己选择了做Sprin ...

  8. ajax上传图片文件

    这里用的是一个隐藏的iframe,这样可以让form表单提交到这个iframe里面,用户就看不到页面的刷新了 前段时间在解决ajax上传文件时折腾了好一阵.直接用$.post上传文本信息肯定是没有问题 ...

  9. ionic新手教程第三课-在项目中使用requirejs分离controller文件和server文件

    继上篇教程中提到的,我们新建一个简单的tabs类型的Ionic项目. 依据文件夹文件我们知道,系统自己主动创建了一个controller文件和server文件,而且把全部的控制器和服务都写到这两个文件 ...

随机推荐

  1. dubbo Protocol实现剖析

    title: dubbo Protocol实现剖析 date: 2018-09-09 19:10:07 tags: --- 2.6.3版本,之前读的是2.4.9版本 本篇主要阐述dubbo rpc的c ...

  2. redis安装、配置和启动

    一.运行环境 1.vmware虚拟机上的centos7系统,安装步骤略,网上搜搜就有,连接工具:secureCRT 2.新安装的linux,是没有wget命令,所以先执行这个命令安装下:yum -y ...

  3. pl/sql的控制结构,分支、循环、控制

    一.pl/sql的进阶--控制结构在任何计算机语言(c,java,pascal)都有各种控制语句(条件语句,循环结构,顺序控制结构...),在pl/sql中也存在这样的控制结构.在本部分学习完成后,希 ...

  4. Spring事务支持:利用继承简化配置

    因为事务代理的实现类是 TransactionProxyFactoryBean . 事务代理Bean必须注入事务管理器. 大部分情况下,每个事务代理的事务属性大同小异,对于这种情况,Spring提供了 ...

  5. python自动安装python2.7

    #coding = utf-8 import os import sys if(os.getuid() == 0): pass else: print ("you are not root ...

  6. webpack的像素转vw单位的loader插件

    安装: npm i px2vw-view-loader 配置: 按以下loader格式,添加进入webpack配置文件,实现从px转换成vw,适用于移动端项目 module: { rules: [{ ...

  7. 【bzoj3251】树上三角形 朴素LCA+暴力

    题目描述 给定一大小为n的有点权树,每次询问一对点(u,v),问是否能在u到v的简单路径上取三个点权,以这三个权值为边长构成一个三角形.同时还支持单点修改. 输入 第一行两个整数n.q表示树的点数和操 ...

  8. HDU——1213How Many Tables(并查集按秩合并)

    J - How Many Tables Time Limit:1000MS     Memory Limit:32768KB     64bit IO Format:%I64d & %I64u ...

  9. <定时主库导出/备库导入>

    1.设置定时任务时间及所需要的dmp文件路径 [mm1@localhost ~]$ crontab -e 0 0 * * *  sh /home/mm1/exp_table.sh  2>& ...

  10. Eclipse + Apache Axis2 发布RESTful WebService(一)基础知识

    1.什么是WebService 学习 WebService 第一步:体系结构.三元素SOAP/WSDL/UDDI 2.什么是Axis2 Axis2是Apache一套崭新的WebService引擎(框架 ...