在实现multipart/form-data的图片上传时,需要用\r\n来分隔每一行,在JAVA中实现multipart/form-data的图片上传时则可以使用System.getProperty("line.separator")来进行每一行的分割。但是如果要将代码用于Android中,则切记不能使用System.getProperty("line.separator")来进行每一行的分割,因为在Android中System.getProperty("line.separator")的结果是\n,在JAVA中则是\r\n。

故不推荐大家使用System.getProperty("line.separator"),会出现一些意想不到的问题,并且出现这些问题还不易追溯到System.getProperty("line.separator")的使用上来。

下面贴上JAVA和Android都可使用的上传代码,改代码是针对Nimg实现,如需要使用与其他环境,则针对环境更改“上传参数”处代码即可。

UploadImage.java

packagecloud.test;importjava.io.BufferedReader;importjava.io.ByteArrayOutputStream;importjava.io.DataOutputStream;importjava.io.File;importjava.io.FileInputStream;importjava.io.IOException;importjava.io.InputStreamReader;importjava.net.HttpURLConnection;importjava.net.URL;importjava.util.UUID;/***图片上传*@authorCloud*@version1.0*/publicclassUploadImage{privatestaticfinalStringMULTIPART_FORM_DATA="multipart/form-data";privatestaticfinalStringTWOHYPHENS="--";privatestaticfinalStringBOUNDARY="---------------------------"+UUID.randomUUID();privatestaticfinalStringLINEEND="\r\n";privatestaticfinalStringFORMNAME="userfile";privateStringactionUrl;privateinttimeout;privateStringfileName;privatebyte[]data;privateStringimageType;/***初始化图片上传工具*@paramactionUrl-图片存储地址*@paramtimeout-图片上传超时时间(毫秒)*/publicUploadImage(StringactionUrl,inttimeout){this.actionUrl=actionUrl;this.timeout=timeout;}/***设置上传内容*@paramfileName-图片名称*@paramdata-图片内容*@paramimageType-图片格式*/publicvoidsetData(StringfileName,byte[]data,ImageTypeimageType)throwsException{this.fileName=fileName;this.data=data;this.imageType=imageType.getValue();if(imageType!=null){Stringextension=imageType.getValue().substring(imageType.getValue().indexOf("/")+1,imageType.getValue().length());this.fileName=fileName+"."+extension;}}/***上传*@return-格式<br/>*{<br/>*&nbsp;&nbsp;&nbsp;&nbsp;"code":200,<br/>*&nbsp;&nbsp;&nbsp;&nbsp;"msg":"uploadsuccess!",<br/>*&nbsp;&nbsp;&nbsp;&nbsp;"data":{<br/>*&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;"t":"png",<br/>*&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;"userpath":"01",<br/>*&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;"md5":"6f8b47ec3b8ea08335cb6e13cbbe96dc",<br/>*&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;"url":"01/6f8b47ec3b8ea08335cb6e13cbbe96dc.png"<br/>*&nbsp;&nbsp;&nbsp;&nbsp;}<br/>*}<br/>*/publicStringupload(){returnupload(null,null);}/***上传*@paramactType-图片处理命令*@paramparam-图片处理参数*@return-格式<br/>*{<br/>*&nbsp;&nbsp;&nbsp;&nbsp;"code":200,<br/>*&nbsp;&nbsp;&nbsp;&nbsp;"msg":"uploadsuccess!",<br/>*&nbsp;&nbsp;&nbsp;&nbsp;"data":{<br/>*&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;"t":"png",<br/>*&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;"userpath":"01",<br/>*&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;"md5":"6f8b47ec3b8ea08335cb6e13cbbe96dc",<br/>*&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;"url":"01/6f8b47ec3b8ea08335cb6e13cbbe96dc.png"<br/>*&nbsp;&nbsp;&nbsp;&nbsp;}<br/>*}<br/>*/publicStringupload(ActTypeactType,Stringparam){HttpURLConnectionconn=null;DataOutputStreamoutput=null;BufferedReaderinput=null;try{URLurl=newURL(actionUrl);conn=(HttpURLConnection)url.openConnection();conn.setConnectTimeout(timeout);conn.setDoInput(true);conn.setDoOutput(true);conn.setUseCaches(false);conn.setRequestMethod("POST");conn.setRequestProperty("Connection","keep-alive");conn.setRequestProperty("Content-Type",MULTIPART_FORM_DATA+";boundary="+BOUNDARY);conn.connect();output=newDataOutputStream(conn.getOutputStream());StringBuildersb=newStringBuilder();if(actType!=null&&param!=null){/***上传参数*/sb.append(TWOHYPHENS+BOUNDARY+LINEEND);sb.append("Content-Disposition:form-data;name=\"act\""+LINEEND);sb.append(LINEEND);sb.append(actType.getValue()+LINEEND);output.writeBytes(sb.toString());sb=newStringBuilder();sb.append(TWOHYPHENS+BOUNDARY+LINEEND);sb.append("Content-Disposition:form-data;name=\"param\""+LINEEND);sb.append(LINEEND);sb.append(param+LINEEND);output.writeBytes(sb.toString());}/***上传图片*/sb=newStringBuilder();sb.append(TWOHYPHENS+BOUNDARY+LINEEND);sb.append("Content-Disposition:form-data;name=\""+FORMNAME+"\";filename=\""+fileName+"\""+LINEEND);sb.append("Content-Type:"+imageType+LINEEND);sb.append(LINEEND);output.writeBytes(sb.toString());output.write(data,0,data.length);output.writeBytes(LINEEND);/***上传结束*/output.writeBytes(TWOHYPHENS+BOUNDARY+TWOHYPHENS+LINEEND);output.flush();/***返回信息*/intcode=conn.getResponseCode();System.out.println(code);if(code!=200){thrownewRuntimeException("请求'"+actionUrl+"'失败!");}input=newBufferedReader(newInputStreamReader(conn.getInputStream()));StringBuilderresponse=newStringBuilder();StringoneLine;while((oneLine=input.readLine())!=null){response.append(oneLine+LINEEND);}returnresponse.toString();}catch(IOExceptione){thrownewRuntimeException(e);}finally{try{if(output!=null){output.close();}if(input!=null){input.close();}}catch(IOExceptione){thrownewRuntimeException(e);}if(conn!=null){conn.disconnect();}}}}

ActType.java

packagecloud.test;/***图像上传命令*@authorCloud*@version1.0*/publicenumActType{/***旋转*/ROTATE("rotate"),/***裁剪*/CROP("crop"),/***缩放*/RESIZE("resize");privateStringvalue;privateActType(Stringvalue){this.value=value;}publicStringgetValue(){returnvalue;}}

ImageType.java

packagecloud.test;/***图片格式*@authorCloud*@version1.0*/publicenumImageType{/***JPG格式*/JPG("image/jpg"),/***PNG格式*/PNG("image/png"),/***GIF格式*/GIF("image/gif"),/***JPEG格式*/JPEG("image/jpeg");privateStringvalue;privateImageType(Stringvalue){this.value=value;}publicStringgetValue(){returnvalue;}}

源代码、jar包、说明文档下载地址http://pan.baidu.com/s/1ntxMvBb

更多相关文章

  1. 杂乱之android的Spinner应用
  2. Android实现三级联动下拉框 下拉列表spinner的实例代码
  3. Android(安卓)Dialog Activity
  4. Android提权代码zergRush分析
  5. Android(安卓)编码规范 | 代码风格指南
  6. Android实用代码七段(三)
  7. %s使用
  8. android用户界面-组件Widget-选项卡Tab
  9. Android全屏 去除标题栏和状态栏

随机推荐

  1. 【C++趣味程序】之开心消消乐
  2. C中scanf()和gets()之间的区别(代码示例)
  3. C中如何声明指向函数的指针?
  4. C++实现在二维数组中的查找
  5. C#中的Console.Read()方法详解
  6. C/C++函数如何返回多个值?(代码示例)
  7. C ++中Accessor函数的特征
  8. 用C++实现最短路径之Dijkstra算法
  9. c#如何在程序中定义和使用自定义事件
  10. C中的time()函数怎么用?