文件的上传(转)

iOS开发网络篇—文件的上传

说明:文件上传使用的时POST请求,通常把要上传的数据保存在请求体中。本文介绍如何不借助第三方框架实现iOS开发中得文件上传。

  由于过程较为复杂,因此本文只贴出部分关键代码。

主控制器的关键代码:

YYViewController.m

 1 #import "YYViewController.h"
 2
 3 #define YYEncode(str) [str dataUsingEncoding:NSUTF8StringEncoding]
 4
 5 @interface YYViewController ()
 6
 7 @end
 8
 9 @implementation YYViewController
10
11 - (void)viewDidLoad
12 {
13     [super viewDidLoad];
14     // Do any additional setup after loading the view, typically from a nib.
15 }
16
17 - (void)upload:(NSString *)name filename:(NSString *)filename mimeType:(NSString *)mimeType data:(NSData *)data parmas:(NSDictionary *)params
18 {
19     // 文件上传
20     NSURL *url = [NSURL URLWithString:@"http://192.168.1.200:8080/YYServer/upload"];
21     NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
22     request.HTTPMethod = @"POST";
23
24     // 设置请求体
25     NSMutableData *body = [NSMutableData data];
26
27     /***************文件参数***************/
28     // 参数开始的标志
29     [body appendData:YYEncode(@"--YY\r\n")];
30     // name : 指定参数名(必须跟服务器端保持一致)
31     // filename : 文件名
32     NSString *disposition = [NSString stringWithFormat:@"Content-Disposition: form-data; name=\"%@\"; filename=\"%@\"\r\n", name, filename];
33     [body appendData:YYEncode(disposition)];
34     NSString *type = [NSString stringWithFormat:@"Content-Type: %@\r\n", mimeType];
35     [body appendData:YYEncode(type)];
36
37     [body appendData:YYEncode(@"\r\n")];
38     [body appendData:data];
39     [body appendData:YYEncode(@"\r\n")];
40
41     /***************普通参数***************/
42     [params enumerateKeysAndObjectsUsingBlock:^(id key, id obj, BOOL *stop) {
43         // 参数开始的标志
44         [body appendData:YYEncode(@"--YY\r\n")];
45         NSString *disposition = [NSString stringWithFormat:@"Content-Disposition: form-data; name=\"%@\"\r\n", key];
46         [body appendData:YYEncode(disposition)];
47
48         [body appendData:YYEncode(@"\r\n")];
49         [body appendData:YYEncode(obj)];
50         [body appendData:YYEncode(@"\r\n")];
51     }];
52
53     /***************参数结束***************/
54     // YY--\r\n
55     [body appendData:YYEncode(@"--YY--\r\n")];
56     request.HTTPBody = body;
57
58     // 设置请求头
59     // 请求体的长度
60     [request setValue:[NSString stringWithFormat:@"%zd", body.length] forHTTPHeaderField:@"Content-Length"];
61     // 声明这个POST请求是个文件上传
62     [request setValue:@"multipart/form-data; boundary=YY" forHTTPHeaderField:@"Content-Type"];
63
64     // 发送请求
65     [NSURLConnection sendAsynchronousRequest:request queue:[NSOperationQueue mainQueue] completionHandler:^(NSURLResponse *response, NSData *data, NSError *connectionError) {
66         if (data) {
67             NSDictionary *dict = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingMutableLeaves error:nil];
68             NSLog(@"%@", dict);
69         } else {
70             NSLog(@"上传失败");
71         }
72     }];
73 }
74
75 - (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
76 {
77     // Socket 实现断点上传
78
79     //apache-tomcat-6.0.41/conf/web.xml 查找 文件的 mimeType
80 //    UIImage *image = [UIImage imageNamed:@"test"];
81 //    NSData *filedata = UIImagePNGRepresentation(image);
82 //    [self upload:@"file" filename:@"test.png" mimeType:@"image/png" data:filedata parmas:@{@"username" : @"123"}];
83
84     // 给本地文件发送一个请求
85     NSURL *fileurl = [[NSBundle mainBundle] URLForResource:@"itcast.txt" withExtension:nil];
86     NSURLRequest *request = [NSURLRequest requestWithURL:fileurl];
87     NSURLResponse *repsonse = nil;
88     NSData *data = [NSURLConnection sendSynchronousRequest:request returningResponse:&repsonse error:nil];
89
90     // 得到mimeType
91     NSLog(@"%@", repsonse.MIMEType);
92     [self upload:@"file" filename:@"itcast.txt" mimeType:repsonse.MIMEType data:data parmas:@{
93                                                                                               @"username" : @"999",
94                                                                                               @"type" : @"XML"}];
95 }
96
97 @end

补充说明:

文件上传请求数据格式

部分文件的MIMEType

如何获取MIMEType?

完全可以添加一个NSString的类别,直接获取当前字符串的MIMEType

- (NSString *)MIMEType {

    NSURLResponse *response = nil;
    NSURLRequest *request = [NSURLRequest requestWithURL:[NSURL fileURLWithPath:self]];

    [NSURLConnection sendSynchronousRequest:request returningResponse:&response error:nil];
    return response.MIMEType;
}
时间: 2024-08-24 12:56:45

文件的上传(转)的相关文章

iOS开发网络篇—文件的上传

iOS开发网络篇—文件的上传 说明:文件上传使用的时POST请求,通常把要上传的数据保存在请求体中.本文介绍如何不借助第三方框架实现iOS开发中得文件上传. 由于过程较为复杂,因此本文只贴出部分关键代码. 主控制器的关键代码: YYViewController.m 1 #import "YYViewController.h" 2 3 #define YYEncode(str) [str dataUsingEncoding:NSUTF8StringEncoding] 4 5 @inter

PHP文件的上传

<?php header('Content-type:text/html;charset=utf-8'); if(isset($_POST['submit'])){ //检测表单'submit'是否有上传,如果有上传继续下一步,如果没那就没反应 if(is_uploaded_file($_FILES['myfile']['tmp_name'])){ //检测指定文件是否通过HTTP POST上传的,如果是继续下一步,如果不是提示'可能有攻击!' $arr=pathinfo($_FILES['my

文件的上传

上传: 1). 表单需要注意的 3 点 2). Struts2 的文件上传实际上使用的是 Commons FileUpload 组件, 所以需要导入 commons-fileupload-1.3.jarcommons-io-2.0.1.jar 3). Struts2 进行文件上传需要使用 FileUpload 拦截器 4). 基本的文件的上传: 直接在 Action 中定义如下 3 个属性, 并提供对应的 getter 和 setter //文件对应的 File 对象private File [

【转】文件各种上传,离不开的表单

阅读目录 利用表单实现文件上传 表单异步上传(jquery.form插件) 模拟表单数据上传(FormData) 分片上传 使用HTML5 拖拽.粘贴上传 上传插件(WebUploader) 总结 作为程序员的我们,经常会要用到文件的上传和下载功能.到了需要用的时候,各种查资料.有木有..有木有....为了方便下次使用,这里来做个总结和备忘. 利用表单实现文件上传 最原始.最简单.最粗暴的文件上传. 前端代码: //方式1 <form action="/Home/SaveFile1&quo

用struts2实现文件的上传下载

在做B/S系统时经常会有文件上传下载的需求,现就基于struts2框架实现其功能 Struts2框架默认采用Commons-fileupload组件完成文件上传功能.? 使用Struts2框架实现文件上传功能,只需在Action中定义一个java.io.File类型的成员并为之设立setter方法,方法名要和参数名对应.? 客户端上传的文件, Struts2框架会自动将其保存在临时文件中,封装成java.io.File类对象.如果还想得到上传的文件名和文件类型,需按照如下命名规则在Action中

struts2 文件的上传下载 表单的重复提交 自定义拦截器

文件上传中表单的准备 要想使用 HTML 表单上传一个或多个文件 须把 HTML 表单的 enctype 属性设置为 multipart/form-data 须把 HTML 表单的method 属性设置为 post 需添加 <input type=“file”> 字段. Struts 对文件上传的支持 在 Struts 应用程序里, FileUpload 拦截器和 Jakarta Commons FileUpload 组件可以完成文件的上传. 步骤:1. 在 Jsp 页面的文件上传表单里使用

使用Loadrunner进行文件的上传和下载

最近使用loadrunner中需要录制文件的上传和下载,上传功能模块利用录制可以直接实现,下载无法实现,在网上找到了一段代码,自己动手试验了下,发现没有用 辛苦找到的,还是记录下吧 (1)LoadRunner上传文件 web_submit_data("importStudent.do", "Action=https://testserver/console/importStudent.do", "Method=POST", "EncTy

PHP文件的上传下载

一.文件的上传 1.客户端设置: (1).在 标签中将enctype和method两个属性指明相应的值. Enctype="multipart/form-data"; Method="POST" (2).form表单中设置一个hidden类型的input框,其中name的值为MAX_FILE_SIZE的隐藏值 2.服务器端设置: (1).$_FILES多维数组:用于存储各种上传文件有关的信息 (2).文件上传与php配置文件的设置,如以下php.ini文件中的一些指

smartupload实现文件的上传、下载

package com.yc.util; import java.io.IOException; import java.sql.SQLException; import java.util.Collection; import java.util.Date; import java.util.Enumeration; import java.util.HashMap; import java.util.Map; import java.util.Random; import javax.ser

JSP使用jspsmartupload实现文件的上传

这个程序出现点问题,输入的只要是中文,都会出现乱码,自己经过各种各样的方法,还是无法解决,哪位大神能赐教一下…… :uploadFileForm.jsp <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%><% String path = request.getContextPath(); String basePath = request.ge