在 Objective C 中通过 POST 上传图像

2024-01-22

我目前正在通过 HTTP Post 将图像上传到服务器,但似乎无法找到构建调用该服务的 url 的方法。用户从库或相机中选择图像,然后调用执行插入语句的 json 服务。

该服务需要以下 uritemplate:

@"%@/DataTransfer/SetUserProfileImage?EMP_ID=%@&image=%@&imageName=%@"

它期望图像数据以某种方式转换为字符串并通过 url 发送。

这是我当前的代码:

- (BOOL)setUserProfileImage:(UIImage *)imgUser Name:(NSString *)strName{

    AppDelegate *appDelegate = (AppDelegate *)[[UIApplication sharedApplication] delegate];

    NSData *dataImage = UIImagePNGRepresentation(imgUser);

    NSString* theNSString = [[NSString alloc] initWithData:dataImage encoding:NSASCIIStringEncoding];

    NSURL *url = [NSURL URLWithString:[NSString stringWithFormat:@"%@/DataTransfer    /SetUserProfileImage?EMP_ID=%@&"
                                   "image=%@&imageName=%@",
                                   appDelegate.ServerAddress, 
                                   appDelegate.UserId,
                                   theNSString,
                                   strName]];

    NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url 
                                                       cachePolicy: NSURLRequestUseProtocolCachePolicy
                                                   timeoutInterval:10.0];

    [request setHTTPMethod:@"POST"];
    [request setValue:@"application/x-www-form-urlencoded" forHTTPHeaderField:@"Content-Type"];


    NSURLResponse* response = nil;
   NSError* resultError = nil;

   NSData* data = [NSURLConnection sendSynchronousRequest:request 
                                     returningResponse:&response 
                                                 error:&resultError];

   NSString *strResult = [[NSString alloc] initWithBytes:[data bytes] 
                                               length:[data length] 
                                             encoding:NSUTF8StringEncoding]; 

   BOOL imgResponse = [strResult boolValue];
   [strResult release];

   return imgResponse;
}

我收到一条错误消息,指出 NSURL 是“”。似乎无法构建正确的 URL。我知道服务本身会再次将此字符串转换为图像。

UPDATE:

- (BOOL)setUserProfileImage:(UIImage *)imgUser Name:(NSString *)strName{

AppDelegate *appDelegate = (AppDelegate *)[[UIApplication sharedApplication] delegate];

NSString *url = [NSString stringWithFormat:@"%@/DataTransfer/SetUserProfileImage",appDelegate.ServerAddress]; 

NSData *data = UIImagePNGRepresentation(imgUser);

NSString * boundary = @"tweetPhotoBoundaryParm";
NSMutableData *postData = [NSMutableData dataWithCapacity:[data length] + 1024];

name=\"EMP_ID\"\r\n\r\n%@", @"100-01"];
NSString * boundaryString = [NSString stringWithFormat:@"\r\n--%@\r\n", boundary];
NSString * boundaryStringFinal = [NSString stringWithFormat:@"\r\n--%@--\r\n", boundary];


[postData appendData:[boundaryString dataUsingEncoding:NSUTF8StringEncoding]];    
[postData appendData:[[NSString stringWithFormat:@"Content-Disposition: form-data; name=\"image\";\r\nfilename=\"media.png\"\r\nContent-Type: image/png\r\n\r\n"] dataUsingEncoding:NSUTF8StringEncoding]];
[postData appendData:data];
[postData appendData:[boundaryStringFinal dataUsingEncoding:NSUTF8StringEncoding]];

NSMutableURLRequest * theRequest=(NSMutableURLRequest*)[NSMutableURLRequest requestWithURL:[NSURL URLWithString:url] 
                                                                            cachePolicy:NSURLRequestUseProtocolCachePolicy 
                                                                        timeoutInterval:60.0];

[theRequest setHTTPMethod:@"POST"];

[theRequest addValue:[NSString stringWithFormat:@"multipart/form-data; boundary=%@", boundary] forHTTPHeaderField:@"Content-Type"];
//[theRequest addValue:@"www.tweetphoto.com" forHTTPHeaderField:@"Host"];
NSString * dataLength = [NSString stringWithFormat:@"%d", [postData length]];
[theRequest addValue:dataLength forHTTPHeaderField:@"Content-Length"];
[theRequest setHTTPBody:(NSData*)postData];

NSURLConnection * theConnection=[[NSURLConnection alloc] initWithRequest:theRequest delegate:self];

[UIApplication sharedApplication].networkActivityIndicatorVisible = YES;
if (theConnection)
{
    webData =[[NSMutableData data] retain];
}
else
{
    NSLog(@"%@",@"Could not connect to the network");
}

return false;
}

Objective-C

-(void)saveImageToServer
{
    // COnvert Image to NSData
    NSData *dataImage = UIImageJPEGRepresentation([UIImage imageNamed:@"yourImage"], 1.0f);

    // set your URL Where to Upload Image
    NSString *urlString = @"Your URL HERE";

    // set your Image Name
    NSString *filename = @"YourImageFileName";

    // Create 'POST' MutableRequest with Data and Other Image Attachment.
    NSMutableURLRequest* request= [[NSMutableURLRequest alloc] init];
    [request setURL:[NSURL URLWithString:urlString]];
    [request setHTTPMethod:@"POST"];
    NSString *boundary = @"---------------------------14737809831466499882746641449";
    NSString *contentType = [NSString stringWithFormat:@"multipart/form-data; boundary=%@",boundary];
    [request addValue:contentType forHTTPHeaderField: @"Content-Type"];
    NSMutableData *postbody = [NSMutableData data];
    [postbody appendData:[[NSString stringWithFormat:@"\r\n--%@\r\n",boundary] dataUsingEncoding:NSUTF8StringEncoding]];
    [postbody appendData:[[NSString stringWithFormat:@"Content-Disposition: form-data; name=\"userfile\"; filename=\"%@.jpg\"\r\n", filename] dataUsingEncoding:NSUTF8StringEncoding]];
    [postbody appendData:[[NSString stringWithString:@"Content-Type: application/octet-stream\r\n\r\n"] dataUsingEncoding:NSUTF8StringEncoding]];
    [postbody appendData:[NSData dataWithData:dataImage]];
    [postbody appendData:[[NSString stringWithFormat:@"\r\n--%@--\r\n",boundary] dataUsingEncoding:NSUTF8StringEncoding]];
    [request setHTTPBody:postbody];

    // Get Response of Your Request
    NSData *returnData = [NSURLConnection sendSynchronousRequest:request returningResponse:nil error:nil];
    NSString *responseString = [[NSString alloc] initWithData:returnData encoding:NSUTF8StringEncoding];
    NSLog(@"Response  %@",responseString);
}

Swift

// COnvert Image to NSData
var dataImage: NSData = UIImageJPEGRepresentation(UIImage(named: "yourImage"), 1.0)
// set your URL Where to Upload Image
var urlString: String = "Your URL HERE"
// set your Image Name
var filename: String = "YourImageFileName"
// Create 'POST' MutableRequest with Data and Other Image Attachment.
var request: NSMutableURLRequest = NSMutableURLRequest()
request.URL = NSURL(string: urlString)!
request.HTTPMethod = "POST"
var boundary: String = "---------------------------14737809831466499882746641449"
var contentType: String = "multipart/form-data; boundary=\(boundary)"
request.addValue(contentType, forHTTPHeaderField: "Content-Type")
var postbody: NSMutableData = NSMutableData.data()
postbody.appendData("\r\n--\(boundary)\r\n".dataUsingEncoding(NSUTF8StringEncoding))
postbody.appendData("Content-Disposition: form-data; name=\"userfile\"; filename=\"\(filename).jpg\"\r\n".dataUsingEncoding(NSUTF8StringEncoding))
postbody.appendData(String.stringWithString("Content-Type: application/octet-stream\r\n\r\n").dataUsingEncoding(NSUTF8StringEncoding))
postbody.appendData(NSData.dataWithData(dataImage))
postbody.appendData("\r\n--\(boundary)--\r\n".dataUsingEncoding(NSUTF8StringEncoding))
request.HTTPBody = postbody
// Get Response of Your Request
var returnData: NSData = NSURLConnection.sendSynchronousRequest(request, returningResponse: nil, error: nil)
var responseString: String = String(data: returnData, encoding: NSUTF8StringEncoding)
NSLog("Response  %@", responseString)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在 Objective C 中通过 POST 上传图像 的相关文章

随机推荐

  • PECL 安装失败

    从 PHP5 2 6 升级到 php 5 3 后 看起来 我还必须重新安装 PHP memcache module 所以我下载了最新版本的memcache 3 0 6 并遵循此文档 http www php net manual en in
  • 如何使用 python 解析嵌套的 XML 标签?

    如果我使用了错误的术语 请原谅 但这就是我想要完成的任务 我正在尝试从嵌套标签中提取属性和文本信息 例如别名 付款 金额等 但是我的示例代码块只能从 中的子元素中提取信息 而不能从 如何使用 elementtree 尝试获取子元素的子元素
  • 如何从 Backbone Marionette 中的项目视图实例访问复合视图

    基本情况是这样的 我有一个复合视图和一个项目视图 我构建了 Composite 视图 传递给它一个模型和一个集合 模型数据用于填充复合视图的模板 集合数据用于填充复合视图的项目视图 我想要做的是 在项目视图的模板助手中 我想访问复合视图的模
  • 用于几何入口点的 SceneKit 着色器修改器适用于 iOS,但不适用于 OS X

    我正处于制作 SceneKit 着色器修改器 用于几何入口点 的早期阶段 该修改器根据高度图纹理置换平面的几何形状 计划是用它来创建地形 在 iOS 编辑 iOS 模拟器 中 着色器按其应有的方式工作 但会将此警告打印到控制台 SceneK
  • Xamarin Forms 错误 =>“jarsigner.exe”退出,代码为 1

    我越来越 jarsigner exe 退出 代码为 1我必须更改密钥库位置我不知道如何在 Windows 中以 xamarin 形式进行更改 bcoz 我将此项目从 MAC 复制到 Windows 并且在 PROGUARD 中遇到问题 因为
  • Visual Studio Code 无法打开源文件“iostream”

    我是 C 和 Visual Studio Code 的新手 所以我不知道如何解决这个问题 我尝试过阅读教程在 Visual Studio Code 中使用 Clang https code visualstudio com docs cpp
  • 将向量初始化为零 C++/C++11

    我知道在 C 11 中他们添加了将变量初始化为零的功能 double number number 0 int data data 0 有没有类似的方法来初始化std vector固定长度全为零 您不需要为此初始化列表 std vector
  • 类没有名为的成员

    我在使用我的类对象访问类中的函数时遇到问题main功能 我只是想为该类创建对象并使用该对象来访问该类内部的函数 cpp文件 我不断收到错误 我什至编写了最简单的程序来测试它 但仍然收到错误 Main include
  • 处理 IDisposable 对象处置的通用函数

    我正在开发一个处理大量 Sql 对象的类 Connection Command DataAdapter CommandBuilder 等 在多个实例中 我们有这样的代码 if command null command Dispose if
  • iOS:以编程方式创建 UIWindow 导致位置错误

    在 iOS 5 1 1 中 我发现如果我创建 UIWindow 我厌倦了 IB 并将其框架设置为 UIScreen mainScreen bounds 则窗口会显示状态栏下 然而 如果我在 iOS 6 上做同样的事情 它就会出现在状态栏正下
  • Json 对象数组长度

    我正在使用一些类似于以下内容的 Json Apps Name app1 id 1 groups id 1 name test group 1 desc this is a test group id 2 name test group 2
  • 将 DVCS 与 Visual Source Safe 相结合

    我在工作中被迫使用 Visual Source Safe 2005 我想将其与 DVCS 结合起来 这样我就可以在本地签入文件 而不会在出现错误或无法编译时打扰我的同事 在我对 Mercurial 的尝试中 它有效 但会导致一些奇怪的问题
  • Azure 角色间同步

    我想知道同步运行相同角色的多个 azure 实例的最佳实践 更准确地说 我想防止多个工作角色在同一工作单元上工作 Azure 队列似乎对这个问题没有帮助 一种选择是使用带有锁和存储过程的 sql 表 但是在Azure中使用sql同步似乎有点
  • 酒庄类型的索引在哪里?

    我想构建一个备用的 Winery 模式解码器 所以我查看了一些编码模式 Codec Winery gt B unpack serialiseSchema schema Proxy Proxy Void 4 5 0 Codec Winery
  • 在 Elasticsearch 中建模父/子关系(产品/产品变体)

    使用 ES 或 Solr 对产品变体进行建模让我大吃一惊 考虑 人为的例子 不同的产品 例如 T 恤 每个产品都有一组属性 productid name desc brand color popularity 每个产品都有一组具有属性的产品
  • 为什么我们不能有静态外部类[重复]

    这个问题在这里已经有答案了 为什么我们不能创建外部的静态类 我在这个社区中阅读了该问题的答案 但还没有得到完美的答案 有人可以帮我一个确切的答案吗 static class A void display System out println
  • Excel 文件格式无法用 Pandas 确定,随机发生

    我有一个编辑 xlsx 文件的脚本 一年半以来我每周都成功运行 直到上周开始出现此错误 Excel file format cannot be determined you must specify an engine manually d
  • Excel VBA查询外部.aspx页面并检索数据

    我已经为此苦苦挣扎了大约一天 基本上 我想编写一个 Excel 宏来循环遍历 Excel 中的列表 查询网页并检索一些数据 理想情况下 我只想检索所需的数据 以便将其放置在相邻的单元格中 但此时我会尽一切努力 页面是ASP net 我没有经
  • 有没有 XSLT 处理命令行工具? [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我想通过 XSLT 文件和 XSLT 处理工具将 XML 文件更改为修改后的 XML 文件 例如 xs
  • 在 Objective C 中通过 POST 上传图像

    我目前正在通过 HTTP Post 将图像上传到服务器 但似乎无法找到构建调用该服务的 url 的方法 用户从库或相机中选择图像 然后调用执行插入语句的 json 服务 该服务需要以下 uritemplate DataTransfer Se