菜鸟教程小白 发表于 2022-12-13 10:40:46

ios - 如何在服务器上上传png类型的图像


                                            <p><p>我的问题可能被标记为重复,但经过大量解决方案后,我仍然无法弄清楚我哪里出错了。请帮忙。</p>

<p>我的图片名称是“image.png”。请务必指定应包含在 BoundaryConstant 中的内容。我刚刚从某个网站复制了它。</p>

<p></p><pre><p></p>

<code>////创建请求
NSMutableURLRequest *request = [ init];
NSURL* requestURL = ;
[请求设置 URL:requestURL];
[请求 setCachePolicy:NSURLRequestReloadIgnoringLocalCacheData];
[请求设置HTTPShouldHandleCookies:NO];
[请求 setTimeoutInterval:30];
[请求 setHTTPMethod:@"POST"];
NSString *BoundaryConstant = @"----------V2ymHFg03ehbqgZCaKO6jy";
NSString *filename = @"image";
//在 HTTP 头中设置 Content-Type
NSString *contentType = ;
[请求 setValue:contentType forHTTPHeaderField:@"Content-Type"];

//发布正文
NSMutableData *body = ;

//添加图片数据
NSData *imageData = UIImagePNGRepresentation();
如果(图像数据){
    dataUsingEncoding:NSUTF8StringEncoding]];
    [正文 appendData:[ dataUsingEncoding:NSUTF8StringEncoding]] ;
    ];
    [正文 appendData:];
    [正文 appendData:[ dataUsingEncoding:NSUTF8StringEncoding]];
}
dataUsingEncoding:NSUTF8StringEncoding]];

//将帖子的正文设置为请求
[请求 setHTTPBody:body];

//设置内容长度
NSString *postLength = ];
[请求 setValue:postLength forHTTPHeaderField:@"Content-Length"];

//设置网址
[请求设置 URL:requestURL];

NSData *returnData = ;
NSString *returnString = [ initWithData:returnData encoding:NSUTF8StringEncoding];

NSLog(@"Ret: %@",returnString);
</code></pre>

<p></p></p>
                                    <br><hr><h1><strong>Best Answer-推荐答案</ strong></h1><br>
                                            <p><p>有额外的 <code>\r\n</code> 字符(参见下面的第 2 点),但其他方面看起来还不错。如果没有看到服务器代码,也没有看到 <code>NSURLResponse</code> 对象,也没有看到 <code>NSError</code> 对象,我们无法诊断出可能出了什么问题。</p>

<p>一些细节:</p>

<ol>
<li><p>我不会在边界的开头添加破折号。如果不出意外,很难将前导 <code>--</code> 与实际边界区分开来。</p></li>
<li><p>你在边界之前写了一个额外的<code>\r\n</code>。我会替换</p>

<pre><code> dataUsingEncoding:NSUTF8StringEncoding]];
</code></pre>

<p>与</p>

<pre><code> dataUsingEncoding:NSUTF8StringEncoding]];
</code></pre>

<p>并替换</p>

<pre><code> dataUsingEncoding:NSUTF8StringEncoding]];
</code></pre>

<p>与</p>

<pre><code> dataUsingEncoding:NSUTF8StringEncoding]];
</code></pre>

<p>按原样(特别是在您添加图像数据的位置,一个 <code>\r\n</code>,然后是 <code>\r\n--%@--\r\n</code>),您将在上传的图像末尾添加额外的两个字节(即 <code>\r\n</code>)。这通常不会导致问题(图像通常仍然有效),但它不正确。</p></li>
<li><p>一般不需要设置<code>Content-Length</code> header 。</p></li>
<li><p>不要使用同步请求。使用 <code>sendAsynchronousRequest</code>。 </p></li>
<li><p>您将 <code>nil</code> 用于 <code>response</code> 和 <code>error</code> 对象。如果您这样做,那么您可以执行的诊断将受到极大限制。你在瞎飞。应始终检查生成的 <code>NSURLResponse</code> 和 <code>NSError</code> 对象。</p></li>
<li><p>如果不查看服务器代码,我们无法判断此上传是否可行。特别是,我发现您使用名为 <code>filename</code> 且值为 <code>image</code> 的变量作为字段的 <code>name</code> 有点令人困惑。但是,如果您在服务器上的 <code>$_FILES</code>(或者如果不使用 PHP,无论它正在寻找什么字段名称)正在寻找 <code>image</code>,那很好。这只是变量名的混淆/误导性选择。我可能会称该变量为 <code>fieldName</code> 或类似的名称。</p>

<p>最重要的是,<code>$_FILES</code> 是否在寻找名为 <code>image</code> 的字段名称?</p></li>
<li><p>你有一行说:</p>

<pre><code>];
</code></pre>

<p>可能只是:</p>

<pre><code>;
</code></pre>

<p>无需创建新的<code>NSData</code>。</p></li>
<li><p>我将删除对 <code>setURL</code> 的第二次调用。没必要。</p></li>
<li><p>您正在加载 <code>image.png</code>,将其转换为 <code>UIImage</code>,然后使用 <code>UIImagePNGRepresentation</code> 获取 <code>NSData</code>。这可以工作,但效率非常低。直接将文件内容加载到<code>NSData</code>,完全绕过<code>UIImage</code>。</p>

<p>另外,如果找不到图像,我建议您记录错误消息。现在,它会简单地跳过添加图像的步骤(意味着它会静默发送请求,不会告诉你是否有问题)。</p></li>
<li><p>您应该在 <a href="http://charlesproxy.com" rel="noreferrer noopener nofollow">Charles</a> 之类的工具中查看此请求.如果您要在准备请求时了解此级别的详细信息,则应在请求发出时对其进行检查。</p></li>
<li><p>我建议你只使用 <a href="https://github.com/AFNetworking/AFNetworking" rel="noreferrer noopener nofollow">AFNetworking</a> 之类的东西它可以让你摆脱这些杂草。如果您想自己执行此操作,请参阅 <a href="https://stackoverflow.com/a/24252378/1271826" rel="noreferrer noopener nofollow">https://stackoverflow.com/a/24252378/1271826</a> .</p></li>
</ol></p>
                                   
                                                <p style="font-size: 20px;">关于ios - 如何在服务器上上传png类型的图像,我们在Stack Overflow上找到一个类似的问题:
                                                        <a href="https://stackoverflow.com/questions/29648857/" rel="noreferrer noopener nofollow" style="color: red;">
                                                                https://stackoverflow.com/questions/29648857/
                                                        </a>
                                                </p>
                                       
页: [1]
查看完整版本: ios - 如何在服务器上上传png类型的图像