在 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 上传图像 的相关文章

  • UIImage initWithContentsOfFile 不起作用

    我有问题 我想避免 UIImage imageNamed 所以我做了 UIImage prodImg UIImage alloc initWithContentsOfFile myimage png controller productIm
  • 处于编辑模式时滑动即可删除

    我有一个使用 uitableview 的 iPhone 应用程序 我希望始终显示 重新排序 控件 并让用户滑动以删除行 我目前采取的方法是将表格视图置于编辑模式并允许在编辑模式下进行选择 self tableView editing YES
  • 从 CocoaPods 添加 pod 时,架构 x86_64 的重复符号

    我正在尝试使用谷歌分析 https developers google com analytics devguides collection ios v3 进入我的应用程序 但通过 CocoaPod 添加后立即收到此错误 以前我的 Pod
  • 如何降低iphone的sdk Audioqueue的声音?

    我正在使用 Aran Mulhollan 的 RemoteIOPlayer 在 SDK iphone 中使用音频队列 我可以毫无问题 添加两个信号来混合声音 通过乘以从 wav 文件中获得的 UInt32 来增加音量 但所有其他操作都会给我
  • 导出 iPhone 地址簿数据库的可能方法

    我想将 Phone s Address Book sqlite db 导出到我的 iPhone 应用程序中 我在网上搜索过 但一切似乎都在 ABAddressBook 上迭代 但我想知道是否可以以编程方式将 Phone s Address
  • 循环缓冲区录音 iOS:可能吗?

    我的一个客户想要连续录制音频 当他单击 提交 时 他只想提交最后 10 秒的内容 所以他想要连续记录并且只保留最后 x 秒 我认为这需要类似循环缓冲区的东西 但是 作为 iOS 的新手 它看起来像AVAudioRecorder只能写入文件
  • CoreMediaIO,错误更新的属性 kCMIODevicePropertyDeviceIsRunningSomewhere

    当某些进程开始使用相机时 我需要接收一个事件 我通过 CMIOObjectGetPropertyData 完成此操作 但它不能正常工作 只有第一次访问时才是正确的值 我还尝试使用 CMIOObjectAddPropertyListenerB
  • 带 ModalPresentationStyle 的弹出框在 iOS 7 iPad 中不居中

    我在使用 iOS 7 时遇到了一个问题 这似乎是一个错误 或者只是我没有做正确的事情 我有 modalViewController 它在 iPad 上以 ModalPresentationStyle 的形式显示为弹出窗口 而且它不是标准尺寸
  • 从视频创建缩略图 - 提高速度性能 - AVAsset - iPhone [重复]

    这个问题在这里已经有答案了 我正在使用基于以下线程中的代码的代码来生成视频缩略图 从 iPhone SDK 中的视频 URL 或数据获取缩略图 https stackoverflow com questions 1347562 gettin
  • NSHTTPCookieStorage 是否跨应用程序持续存在?

    所以我只是好奇 NSHTTPCookieStorage 是否跨应用程序持久存在 或者仅在当前应用程序本地 我希望在另一个应用程序中收集的一些 cookie 可以在搜索应用程序中访问 是这样的吗 谢谢 PS 这是在 iPhone 或 iPad
  • iPhone iOS 保存从 UIImageJPEGRepresentation() 获得的数据第二次失败:ImageIO: CGImageRead_mapData 'open' failed

    我的 UIImage 操作遇到了一个奇怪的问题 我正在进行保管箱同步 并且必须将我的图像存储为本地文件 为此 我使用以下命令保存它们UIImagePNGRepresentation image or UIImageJPEGRepresent
  • Objective-C:在哪里定义宏以便随处可用?

    我有一个 iOS 应用程序 它在许多视图控制器中使用相同的字符串 数字等 所以我认为最好在一个文件中定义这些常量并在所有视图控制器实现中使用它 优点是更改一个数字 我只需要做一次 而不是在所有视图控制器中都使用该数字 实际上 我的 h 文件
  • 在 uilabel 中查找文本的位置 {x,y}

    我有一个来自服务器的字符串 我正在 UILabel multiligne 上显示它 在该字符串中 我正在识别一些特定的子字符串 我想在该子字符串上放置一个按钮 按钮将是 UILabel 的子视图 为此 我需要子字符串坐标 我经历过这个 但我
  • iPad 照片选择器崩溃

    我正在使用以下函数根据 UIActionSheet 的结果激活设备相机或图像选择器 如果 fromCamera YES 那么它适用于 iPhone 和 iPad 如果 fromCamera NO 那么它可以在 iPhone 上运行并出现图像
  • 是否有针对不同屏幕尺寸的单独故事板?

    基本上我已经完成了一个应用程序 我唯一的问题是 ATM 机应用程序在设计时只考虑了 4 英寸显示屏 当在 3 5 英寸模拟器上运行时 应用程序会丢失 0 5 英寸 显然 那么我的问题是 如何在 Xcode 5 中为不同的屏幕尺寸设置不同的故
  • 使用 iPhone 中的地图视图读取当前位置名称

    我读取了当前位置的纬度和经度值 然后成功将该位置固定在 iPhone 中 现在我想使用这个纬度和经度值读取该地名 我使用以下代码来读取查找当前位置 void mapView MKMapView mapView1 didUpdateUserL
  • 如何将 UILabel 的值绑定到实例变量?

    我是 mac objective c 的新手 我的问题是 我想知道是否可以将 UILabel 文本绑定到变量 而不必在值更改时手动设置文本 例如 在 Mac OS 上 当我打开新的 Finder 窗口并删除文件时 任务栏中的全局可用空间就会
  • Objective-C – 拥有包含 TestFlight SDK 的 TestFlight 配置

    我已按照 TestFlight 的说明复制 发布 配置 我还使用 TestFlight SDK 从我的应用程序获取实时报告 通过这样做 我必须在我的应用程序中包含一些 TestFlight 代码 当然 我不想在我的应用程序的发布版本中包含此
  • 水平 UICollectionView 单行布局

    我正在尝试使用以下命令设置简单的水平布局UICollectionView 兜圈子却没有达到预期的结果 所以任何指针或例子将不胜感激 我粘贴经常更改的代码但没有成功可能没什么意义 该图像显示两行 第一行是单个项目 尺寸正确并且在中心正确对齐
  • UIImageJPEGRepresentation 在视网膜显示屏上提供 2x 图像

    我有这段代码 它创建一个图像 然后向其添加一些效果并缩小其大小以使其largeThumbnail UIImage originalImage UIImage imageWithData self originalImage thumbnai

随机推荐

  • 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