iOS ASIFormDataRequest上传图片 前后台代码
2015-02-12 15:15
369 查看
iOS 表单格式上传图片
java处理上传图片
NSString *urls = NSLocalizedString(@"Service_url_upload_do_json", @""); NSURL *url = [[NSURL alloc] initWithString: urls]; ASIFormDataRequest *request = [ASIFormDataRequest requestWithURL:url]; [request setDelegate :self]; NSString *res = @"http://f.hiphotos.baidu.com/image/pic/item/58ee3d6d55fbb2fb9ecd3a1b4d4a20a44723dcd1.jpg"; NSData *imageData = [[NSData alloc] initWithContentsOfURL:[[NSURL alloc] initWithString:res]]; [request setRequestMethod:@"POST"]; //分界线的标识符 NSString *TWITTERFON_FORM_BOUNDARY = @"AaB03x"; //分界线 --AaB03x NSString *MPboundary=[[NSString alloc]initWithFormat:@"--%@",TWITTERFON_FORM_BOUNDARY]; //结束符 AaB03x-- NSString *endMPboundary=[[NSString alloc]initWithFormat:@"%@--",MPboundary]; //http body的字符串 NSMutableString *body=[[NSMutableString alloc]init]; //参数的集合的所有key的集合 NSString *key=@"smx"; //添加分界线,换行 [body appendFormat:@"%@\r\n",MPboundary]; //添加字段名称,换2行 [body appendFormat:@"Content-Disposition: form-data; name=\"%@\"\r\n\r\n",key]; //添加字段的值 [body appendFormat:@"%@\r\n",@"测试"]; ////添加分界线,换行 [body appendFormat:@"%@\r\n",MPboundary]; //声明pic字段,文件名为boris.png [body appendFormat:@"Content-Disposition: form-data; name=\"pic\"; filename=\"test.jpg\"\r\n"]; //声明上传文件的格式 [body appendFormat:@"Content-Type: image/png\r\n\r\n"]; //声明结束符:--AaB03x-- NSString *end=[[NSString alloc]initWithFormat:@"\r\n%@",endMPboundary]; //声明myRequestData,用来放入http body NSMutableData *myRequestData=[NSMutableData data]; //将body字符串转化为UTF8格式的二进制 [myRequestData appendData:[body dataUsingEncoding:NSUTF8StringEncoding]]; //将image的data加入 [myRequestData appendData:imageData]; //加入结束符--AaB03x-- [myRequestData appendData:[end dataUsingEncoding:NSUTF8StringEncoding]]; //设置HTTPHeader中Content-Type的值 NSString *content=[[NSString alloc]initWithFormat:@"Multipart/form-data; boundary=%@",TWITTERFON_FORM_BOUNDARY]; [request addRequestHeader:@"Content-Type" value:content]; //设置http body [request setPostBody:myRequestData]; [request startAsynchronous];
java处理上传图片
public class FileUploadImpl implements ServletRequestAware, ServletResponseAware { private final static Logger logger = Logger.getLogger(FileUploadImpl.class); protected HttpServletRequest request; protected HttpServletResponse response; @Override public void setServletRequest(HttpServletRequest arg0) { // TODO Auto-generated method stub this.request = arg0; } @Override public void setServletResponse(HttpServletResponse arg0) { // TODO Auto-generated method stub response = arg0; } /** * 处理上传文件 * * @param request * @throws UnsupportedEncodingException */ public void executeUpload() { logger.info("=======executeUpload"); DataOutputStream output = null; response.setContentType("text/html;charset=utf-8"); response.setCharacterEncoding("UTF-8"); try { output=new DataOutputStream(response.getOutputStream()); boolean isMultipart = ServletFileUpload.isMultipartContent(request); if (isMultipart == true) { DiskFileItemFactory factory = new DiskFileItemFactory(); ServletFileUpload upload = new ServletFileUpload(factory); upload.setHeaderEncoding("UTF-8"); List fileItems = upload.parseRequest(request); // 得到所有的表单域,它们目前都被当作FileItem logger.info("fileItems==="+fileItems.size()); String uploadPath = ValueTable.getInstance(false).GetValue( "MobileUploadPath"); String ffmpegPath = ValueTable.getInstance(false).GetValue( "ffmpegPath"); File file = new File(uploadPath); if (!file.exists()) { // 如果没有此目录就创建此目录 file.mkdir(); } int faultid = 0; Iterator<FileItem> iter = fileItems.iterator(); while (iter.hasNext()) { // 依次处理每个表单域 FileItem item = (FileItem) iter.next(); if (item.isFormField()) { // 如果item是正常的表单域 } else { // 如果item是文件上传表单域 String filename = item.getName(); // 得到文件名 String filetype = filename.substring( filename.lastIndexOf(".") + 1, filename.length()); // 文件后缀 InputStream is = item.getInputStream(); // 此处已经得到上传文件的输入流 String filepath = uploadPath + filename; // 此处的filename可以改名存储 if (new File(filepath).exists()) { // 上传文件是否存在 new File(filepath).delete(); // 存在就删除 } if (!filepath.equals("")) { // 如果文件名不为空 FileOutputStream fos = new FileOutputStream( filepath); byte[] buffer = new byte[10240]; int count = 0; while ((count = is.read(buffer)) > 0) { fos.write(buffer, 0, count); // 开始上传至目录文件 } fos.close(); is.close(); // 文件已经生成 开始执行转换线程 if (如果是视频 转成flv格式) { <span style="white-space:pre"> </span>String convertDestPath = uploadPath + filename.substring(0, filename.lastIndexOf(".") + 1) + "flv"; try { ConvertVideo convertVideo = new ConvertVideo( filepath, convertDestPath, ffmpegPath); boolean b = convertVideo.process(); } catch (Exception e) { e.printStackTrace(); } } } } output.write("".getBytes("utf-8")); } } catch (Exception e) { // TODO: handle exception e.printStackTrace(); } try { output.flush(); output.close(); } catch (IOException e) { e.printStackTrace(); } } }
相关文章推荐
- iOS用ASIFormDataRequest实现图片上传
- IOS成长之路-ASIFormDataRequest实现上传图片
- IOS成长之路-ASIFormDataRequest实现上传图片
- IOS成长之路-ASIFormDataRequest实现上传图片
- 好久没写了,今天写个iOS用ASIFormDataRequest实现图片上传
- IOS成长之路-ASIFormDataRequest实现上传图片
- ios ASIFormDataRequest上传图片到php服务器
- iOS用ASIFormDataRequest实现图片上传
- IOS 上传图片 ASIFormDataRequest
- iOS用ASIFormDataRequest实现图片上传
- IOS成长之路-ASIFormDataRequest实现上传图片
- IOS网络请求之ASIFormDataRequest 上传数据
- ASIFormDataRequest 上传图片
- ASIFormDataRequest实现上传图片
- iPhone开发笔记(11)用ASIFormDataRequest实现图片上传
- ASIFormDataRequest 上传图片
- iOS - ASI - ASIFormDataRequest 上传文件到服务器(转载)
- iPhone开发笔记(11)用ASIFormDataRequest实现图片上传
- iOS -- 上传多张图片 后台(PHP)代码和上传一张的一样
- 【IOS学习之路】关于GPRS下上传文件,ASIFormDataRequest在2G网络下上传失败(已解决)iphone开发