当前位置: 首页 > 知识库问答 >
问题:

上传图片到php服务器出错

梁华清
2023-03-14

我在尝试将swift中的图像上载到PHP服务器时遇到问题。在php处理文件之前,一切看起来都很好。在那一刻,我得到了错误。

swft代码的相关部分是:

func myImageUploadRequest(image: UIImage, realfilename: String)
{

    let myUrl = NSURL(string: "http://www.ignistudios.com/boda/postImage.php");

    let request = NSMutableURLRequest(URL:myUrl!);
    request.HTTPMethod = "POST";

    let param = [
        "firstName"  : "username",
        "lastName"    : "lastname",
        "userId"    : "9"
    ]

    let boundary = generateBoundaryString()

    request.setValue("multipart/form-data; boundary=\(boundary)", forHTTPHeaderField: "Content-Type")


    let imageData = UIImageJPEGRepresentation(image, 1)
    print(imageData.debugDescription)

    if(imageData==nil)  { return; }

    request.HTTPBody = createBodyWithParameters(param, filePathKey: "file", realfilename: realfilename, imageDataKey: imageData!, boundary: boundary)

    let task = NSURLSession.sharedSession().dataTaskWithRequest(request) {
        data, response, error in

        if error != nil {
            print("error=\(error)")
            return
        }

        // You can print out response object
        print("******* response = \(response)")

        // Print out reponse body
        let responseString = NSString(data: data!, encoding: NSUTF8StringEncoding)
        print("****** response data = \(responseString!)")



    }

    task.resume()

}


func createBodyWithParameters(parameters: [String: String]?, filePathKey: String?, realfilename: String?, imageDataKey: NSData, boundary: String) -> NSData {
    var body = NSMutableData();

    if parameters != nil {
        for (key, value) in parameters! {
            body.appendString("--\(boundary)\r\n")
            body.appendString("Content-Disposition: form-data; name=\"\(key)\"\r\n\r\n")
            body.appendString("\(value)\r\n")
        }
    }

    let filename = realfilename

    let mimetype = "image/jpg"

    body.appendString("--\(boundary)\r\n")
    body.appendString("Content-Disposition: form-data; name=\"\(filePathKey!)\"; filename=\"\(filename)\"\r\n")
    body.appendString("Content-Type: \(mimetype)\r\n\r\n")
    body.appendData(imageDataKey)
    body.appendString("\r\n")



    body.appendString("--\(boundary)--\r\n")

    return body
}




func generateBoundaryString() -> String {
    return "Boundary-\(NSUUID().UUIDString)"
}

php是

<?php
$uploaddir = '/fotos/';
$uploadfile = $uploaddir . basename($_FILES['file']['name']);
echo "<p>";
if (move_uploaded_file($_FILES['file']['tmp_name'], $uploadfile)) {
  echo "File is valid, and was successfully uploaded.\n";
} else {
  echo "Upload failed";
}
echo "</p>";
echo '<pre>';
echo 'Here is some more debugging info:';
print_r($_FILES);
print "</pre>";
?>

最后,我得到的错误是:

******响应数据=

上载失败

Here is some more debugging info:Array
(
    [file] => Array
        (
            [name] => Optional(\"boda20160428_135709.jpg\")
            [type] => 
            [tmp_name] => 
            [error] => 1
            [size] => 0
        )

)

任何提示都将不胜感激。

共有2个答案

司徒俊雄
2023-03-14

正确答案是图像太大,上传前需要压缩图像,使用这个

 UIImageJPEGRepresentation(image,0.2)

当图像足够小时,您将获得您的tmp名称

秦哲瀚
2023-03-14

看起来Marc B评论了答案,这是一个PHP文件上传大小的问题。

然而,在这种情况下,值得分别测试链中的每个环节。例如,测试和审查createBodyAnd Parameters的输出。创建一个测试并在那里运行它,以检查标头是否正确形成。尤其要确保字符串编码正确。我不熟悉NSMutableData上的appendString方法

应该可以更直接地将输出输入服务器,以消除其他潜在问题。

 类似资料:
  • 问题内容: 我正在尝试从Android设备将文件上传到php服务器。有相同问题的话题,但他使用的是不同的方法。我的Android辅助代码运行正常,并且未显示任何错误消息,但服务器未收到任何文件。这是我的示例代码,我在网上找到了。 和我的PHP服务器端代码如下 Apache正在运行。当我运行服务器时,出现此错误消息。上传文件时出错,请重试!我已经在eclipse中检查了日志数据,我认为是套接字问题,

  • 本文向大家介绍PHP实现上传图片到 zimg 服务器,包括了PHP实现上传图片到 zimg 服务器的使用技巧和注意事项,需要的朋友参考一下 最近我们项目需要一台图片服务器存储用户头像,我们使用 zimg 处理和存储图片,下面简单介绍一下如何使用 PHP 上传图片到 zimg,并获取相应图片的返回信息 使用 curl 库实现上传 根据 zimg 使用文档,我们想要让 zimg 返回 json 信息,

  • 我想上传一张图片,我正在使用http。客户端()用于发出请求, 请求的主体和编码部分应该是什么?

  • 本文向大家介绍微信小程序上传图片到php服务器的方法,包括了微信小程序上传图片到php服务器的方法的使用技巧和注意事项,需要的朋友参考一下 本文实例为大家分享了微信小程序上传图片到php服务器的具体代码,供大家参考,具体内容如下 js代码如下 PHP代码如下upload.php 以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持呐喊教程。

  • 本文向大家介绍webuploader实现上传图片到服务器功能,包括了webuploader实现上传图片到服务器功能的使用技巧和注意事项,需要的朋友参考一下 本文为大家分享了webuploader实现上传图片到服务器的具体代码,供大家参考,具体内容如下 效果图: 一、引入资源文件 1.1 引入webuploader.css文件 1.2 引入webuploader.min.js文件 二、HTML代码

  • 本文向大家介绍ajax上传多图到php服务器的方法,包括了ajax上传多图到php服务器的方法的使用技巧和注意事项,需要的朋友参考一下 一般上传图片到服务器有两种方式: 1、把图片转换成二进制直接存储到数据库里 2、把图片存储到本地目录,并将图片地址存储到数据库里 先粗浅地谈下我对这两种存储方法的优劣点的认识: 1、把图片转换成二进制直接存储到数据库的优点是有利于数据的备份和迁移,但缺点就是会影响