2017-12-21 09:39:55 ANDY_GUO_wei 阅读数 952
  • Java学习指南21 MyBatis框架

    一、课程简介   『Java学习指南系列』的第21篇教程 ,MyBatis 篇,是Java系列的高级课程。本篇介绍 MyBatis 的使用方法,使用 MyBatis 进行数据库开发的相关技术。     MyBatis 是一个基于JDBC的数据库工具框架,使用它可以快速地实现对数据库的访问操作。与之相似的框架还有 af-sql 和 Hibernate。 二、主要内容  本篇主要包含以下内容: * 在项目中加入 MyBatis 支持 * 基于 MyBatis 的查询 * 基于 MyBatis 的插入,自增主键的配置 * 基于 MyBatis 的更新与删除操作 * ResultMap 自定义结果映射 * Dynamic SQL 动态可变的SQL * 注解方式的 Mapper定义 * MyBatis 在Web项目中的应用,全局工厂实例的定义 * 添加Log4j支持,输出MyBatis的日志 三、课程体系 〖Java学习指南系列〗 :包含入门与进阶语法,Swing桌面开发,安卓开发,JavaFX开发,网络通信Socket,数据结构与算法等课程。 〖网站开发系列〗: 包含网页基础、网站入门、数据库、网站中级、FreeMarker、网站高级、项目应用、MyBatis、Redis等课程。

    4072 人正在学习 去看看 邵发
MIME TYPE描述

内容类型(Content-Type),这个头部领域用于指定消息的类型。一般以下面的形式出现。[type]/[subtype]

type有下面的形式。

  • Text:用于标准化地表示的文本信息,文本消息可以是多种字符集和或者多种格式的;
  • Multipart:用于连接消息体的多个部分构成一个消息,这些部分可以是不同类型的数据;
  • Application:用于传输应用程序数据或者二进制数据;
  • Message:用于包装一个E-mail消息;
  • Image:用于传输静态图片数据;
  • Audio:用于传输音频或者音声数据;
  • Video:用于传输动态影像数据,可以是与音频编辑在一起的视频数据格式。

subtype用于指定type的详细形式。content-type/subtype配对的集合和与此相关的参数,将随着时间而增长。为了确保这些值在一个有序而且公开的状态下开发,MIME使用Internet Assigned Numbers Authority (IANA)作为中心的注册机制来管理这些值。常用的subtype值如下所示:

  • text/plain(纯文本
  • text/html(HTML文档)
  • application/xhtml+xml(XHTML文档)
  • image/gif(GIF图像)
  • image/jpeg(JPEG图像)【PHP中为:image/pjpeg】
  • image/png(PNG图像)【PHP中为:image/x-png】
  • video/mpeg(MPEG动画)
  • application/octet-stream(任意的二进制数据)
  • application/pdf(PDF文档)
  • application/msword(Microsoft Word文件)
  • message/rfc822(RFC 822形式)
  • multipart/alternative(HTML邮件的HTML形式和纯文本形式,相同内容使用不同形式表示)
  • application/x-www-form-urlencoded(使用HTTP的POST方法提交的表单)
  • multipart/form-data(同上,但主要用于表单提交时伴随文件上传的场合
2017-06-03 13:02:09 zuojinmin 阅读数 360
  • Java学习指南21 MyBatis框架

    一、课程简介   『Java学习指南系列』的第21篇教程 ,MyBatis 篇,是Java系列的高级课程。本篇介绍 MyBatis 的使用方法,使用 MyBatis 进行数据库开发的相关技术。     MyBatis 是一个基于JDBC的数据库工具框架,使用它可以快速地实现对数据库的访问操作。与之相似的框架还有 af-sql 和 Hibernate。 二、主要内容  本篇主要包含以下内容: * 在项目中加入 MyBatis 支持 * 基于 MyBatis 的查询 * 基于 MyBatis 的插入,自增主键的配置 * 基于 MyBatis 的更新与删除操作 * ResultMap 自定义结果映射 * Dynamic SQL 动态可变的SQL * 注解方式的 Mapper定义 * MyBatis 在Web项目中的应用,全局工厂实例的定义 * 添加Log4j支持,输出MyBatis的日志 三、课程体系 〖Java学习指南系列〗 :包含入门与进阶语法,Swing桌面开发,安卓开发,JavaFX开发,网络通信Socket,数据结构与算法等课程。 〖网站开发系列〗: 包含网页基础、网站入门、数据库、网站中级、FreeMarker、网站高级、项目应用、MyBatis、Redis等课程。

    4072 人正在学习 去看看 邵发

    [[AFHTTPSessionManager manager]POST:@"http://localhost:8080/file" parameters:@{@"name":@"haha",@"email":@"312093933@qq.com"} constructingBodyWithBlock:^(id<AFMultipartFormData_Nonnull formData) {

        

        

        

        NSURL *fileURL = [[NSBundle mainBundle] URLForResource:@"1.jpg" withExtension:nil];

        

        // 要上传保存在服务器中的名称

        // 使用时间来作为文件名 2014-04-30 14:20:57.png

        // 让不同的用户信息,保存在不同目录中

        NSDateFormatter *formatter = [[NSDateFormatter alloc] init];

        // 设置日期格式

        formatter.dateFormat = @"yyyy-MM-ddHH:mm:ss";

        NSString *fileName = [formatter stringFromDate:[NSDate date]];

        

        [formData appendPartWithFileURL:fileURL name:@"file" fileName:[NSString stringWithFormat:@"%@%@",fileName,@".jpg"] mimeType:@"image/png" error:NULL];

        

        

    } progress:nil success:^(NSURLSessionDataTask * _Nonnull task, id  _Nullable responseObject) {

        

        NSLog(@"task header====%@",task.currentRequest.allHTTPHeaderFields);

        

        

    } failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {

        

        

        

    }];

2019-03-07 18:25:19 langzxz 阅读数 241
  • Java学习指南21 MyBatis框架

    一、课程简介   『Java学习指南系列』的第21篇教程 ,MyBatis 篇,是Java系列的高级课程。本篇介绍 MyBatis 的使用方法,使用 MyBatis 进行数据库开发的相关技术。     MyBatis 是一个基于JDBC的数据库工具框架,使用它可以快速地实现对数据库的访问操作。与之相似的框架还有 af-sql 和 Hibernate。 二、主要内容  本篇主要包含以下内容: * 在项目中加入 MyBatis 支持 * 基于 MyBatis 的查询 * 基于 MyBatis 的插入,自增主键的配置 * 基于 MyBatis 的更新与删除操作 * ResultMap 自定义结果映射 * Dynamic SQL 动态可变的SQL * 注解方式的 Mapper定义 * MyBatis 在Web项目中的应用,全局工厂实例的定义 * 添加Log4j支持,输出MyBatis的日志 三、课程体系 〖Java学习指南系列〗 :包含入门与进阶语法,Swing桌面开发,安卓开发,JavaFX开发,网络通信Socket,数据结构与算法等课程。 〖网站开发系列〗: 包含网页基础、网站入门、数据库、网站中级、FreeMarker、网站高级、项目应用、MyBatis、Redis等课程。

    4072 人正在学习 去看看 邵发

需求:iOS端需要写一个上传文件到服务器的功能

客户端

现有工程用的网络库是 Alamofire

    func uploadFile(_ filePath : URL){
        Alamofire.upload(
            //采用post表单上传
            multipartFormData: { multipartFormData in
//                multipartFormData.append(filePath, withName: "file", fileName: "1.zip", mimeType: "application/zip")
                multipartFormData.append(filePath, withName: "file")
                //服务器地址
        },to: "http://127.0.0.1/1/upload.php",encodingCompletion: { encodingResult in
            switch encodingResult {
            case .success(let upload, _, _):
                //json处理
                upload.responseJSON { response in
                    
                    debugPrint(response)
                    //解包
                    guard let result = response.result.value else { return }
                    print("json:\(result)")
                }
                //上传进度
                upload.uploadProgress(queue: DispatchQueue.global(qos: .utility)) { progress in
                    print("文件上传进度: \(progress.fractionCompleted)")
                }
            case .failure(let encodingError):
                debugPrint(encodingError)
            }
        })
    }

调用上面的上传函数,将 1.zip 这个文件上传服务器

        let zip = Bundle.main.path(forResource: "1", ofType: "zip")
        let paths = NSSearchPathForDirectoriesInDomains(.documentDirectory, .userDomainMask, true)
        let filePathStr = paths[0]+"/1.zip"
        FileManager.default.removeItem(atPath: filePathStr)
        try! FileManager.default.copyItem(atPath: zip!, toPath: filePathStr)
        let fileUrl = URL.init(fileURLWithPath: filePathStr)
        uploadFile(fileUrl)

服务端

服务器用的就是本机的 Apache

启动 Apache 服务
sudo apachectl start
重启
sudo apachectl restart
停止
sudo apachectl stop

在启动 Apache 服务前,先修改一下配置,或者修改后重启也可以。

修改 /private/etc/apache2/httpd.conf 文件,搜索 php 会搜到 LoadModule php7_module libexec/apache2/libphp7.so ,将这一行前面的#符号删掉

执行命令 sudo cp /private/etc/php.ini.default /private/etc/php.ini

执行到这里,如果上传的文件小于2M,就可以重启 Apache 服务了。

如果文件比较大,就要修改php.ini文件

  • file_uploads = on ;是否允许通过HTTP上传文件的开关。默认为ON即是开

  • upload_tmp_dir ;文件上传至服务器上存储临时文件的地方,如果没指定就会用系统默认的临时文件夹

  • upload_max_filesize = 8m ;允许上传文件大小的最大值。默认为2M

  • post_max_size = 8m ;指通过表单POST给PHP的所能接收的最大值,包括表单里的所有值。默认为8M

修改上面的参数,就可以写上传稍微大一点的文件了。

服务端代码

/Library/WebServer/Documents 目录下随意创建两个目录 11/upload(名字无任何意义,就是图简单)

创建 upload.php 文件存放在目录 1下,该文件内容就是下面的代码

<?php

$response = array();
$target_path  = $_SERVER['DOCUMENT_ROOT']."/1/upload/";//接收文件目录
$target_path = $target_path . basename( $_FILES['file']['name']);
if(move_uploaded_file($_FILES['file']['tmp_name'], $target_path)) {
    $response ['success'] = "The file ".  basename( $_FILES['file']['name']). " has been uploaded";
}  else{
    $response ['error'] = "There was an error uploading the file, please try again!". $_FILES['file']['error'];
}
echo json_encode($response);
?>

文件上传到服务端,先存储到一个临时目录,然后上面这段 php 代码就是将客户端通过 POST 上传上来的临时文件移动到你指定的目录下,这里的指定目录是 /Library/WebServer/Documents/1/upload

ps:

echo 打印的就是服务端返回给客户端的字符串内容

upload 目录要有读写权限

URL 如果是 文件URL ,字符串以file:开头

客户端的 withName: "file" 必须和服务端的 $_FILES['file'] 相同

2018-04-02 18:15:45 ANDY_GUO_wei 阅读数 257
  • Java学习指南21 MyBatis框架

    一、课程简介   『Java学习指南系列』的第21篇教程 ,MyBatis 篇,是Java系列的高级课程。本篇介绍 MyBatis 的使用方法,使用 MyBatis 进行数据库开发的相关技术。     MyBatis 是一个基于JDBC的数据库工具框架,使用它可以快速地实现对数据库的访问操作。与之相似的框架还有 af-sql 和 Hibernate。 二、主要内容  本篇主要包含以下内容: * 在项目中加入 MyBatis 支持 * 基于 MyBatis 的查询 * 基于 MyBatis 的插入,自增主键的配置 * 基于 MyBatis 的更新与删除操作 * ResultMap 自定义结果映射 * Dynamic SQL 动态可变的SQL * 注解方式的 Mapper定义 * MyBatis 在Web项目中的应用,全局工厂实例的定义 * 添加Log4j支持,输出MyBatis的日志 三、课程体系 〖Java学习指南系列〗 :包含入门与进阶语法,Swing桌面开发,安卓开发,JavaFX开发,网络通信Socket,数据结构与算法等课程。 〖网站开发系列〗: 包含网页基础、网站入门、数据库、网站中级、FreeMarker、网站高级、项目应用、MyBatis、Redis等课程。

    4072 人正在学习 去看看 邵发

后查看AFNetworking的AFURLRequestSerialization.m文件中最后生成的字符串

BookingDate=1&BookingMobile=18998570000&BookingName=%E6%B5%8B%E8%AF%95&BookingNum=1&BudgetPrice=330.2&OrderItem[][ProductId]=10&OrderItem[][Quantity]=3&OrderItem[][ProductId]=12&OrderItem[][Quantity]=1&Status=1&StoreId=2&UserId=1

发现其中的“OrderItem”后的[]中居然空的,没有索引 ,然后就找到AFURLRequestSerialization.m的AFQueryStringPairsFromKeyAndValue方法中

在[]中加上nestedValue的索引[array indexOfObject:nestedValue],如下

for (id nestedValue in array) {

[mutableQueryStringComponents addObjectsFromArray:AFQueryStringPairsFromKeyAndValue([NSString stringWithFormat:@"%@[%lu]", key,(unsigned long)[array indexOfObject:nestedValue]], nestedValue)];

}

2016-09-13 15:12:00 weixin_34327223 阅读数 9
  • Java学习指南21 MyBatis框架

    一、课程简介   『Java学习指南系列』的第21篇教程 ,MyBatis 篇,是Java系列的高级课程。本篇介绍 MyBatis 的使用方法,使用 MyBatis 进行数据库开发的相关技术。     MyBatis 是一个基于JDBC的数据库工具框架,使用它可以快速地实现对数据库的访问操作。与之相似的框架还有 af-sql 和 Hibernate。 二、主要内容  本篇主要包含以下内容: * 在项目中加入 MyBatis 支持 * 基于 MyBatis 的查询 * 基于 MyBatis 的插入,自增主键的配置 * 基于 MyBatis 的更新与删除操作 * ResultMap 自定义结果映射 * Dynamic SQL 动态可变的SQL * 注解方式的 Mapper定义 * MyBatis 在Web项目中的应用,全局工厂实例的定义 * 添加Log4j支持,输出MyBatis的日志 三、课程体系 〖Java学习指南系列〗 :包含入门与进阶语法,Swing桌面开发,安卓开发,JavaFX开发,网络通信Socket,数据结构与算法等课程。 〖网站开发系列〗: 包含网页基础、网站入门、数据库、网站中级、FreeMarker、网站高级、项目应用、MyBatis、Redis等课程。

    4072 人正在学习 去看看 邵发

PHP 上传文件接口:

//保存图片
$json_result ['status'] = 0;
$path = 'upfile';
$json_result ['status'] = 0;
$json_result ['successmsg'] = '上传失败';
if (isset ( $_FILES ['image'] )) {
    $upfile = 'upfile/' . $_FILES ['image'] ['name'];
    if (! @file_exists ( $path )) {
        @mkdir ( $path );
    }
    $result = @move_uploaded_file ( $_FILES ['image'] ['tmp_name'], $upfile );
    if (! $result) {
        $json_result ['status'] = 0;
        $json_result ['successmsg'] = '上传失败';
        $json_result ['datas'] = array ('savePath' => $upfile );
        exit ( json_encode ( $json_result ) );
    }
}


$json_result ['status'] = 1;
$json_result ['datas'] = array ('savePath' => "http://".$_SERVER['SERVER_NAME'].":".$_SERVER['SERVER_PORT']."/".$upfile );
print_r(json_encode($json_result));

iOS通过接口上传图片:

// 上传头像
- (void)uploadUserHeadImage:(UIImage *)image {
    // 获得网络管理者
    AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];
    
    // 设置请求参数
    NSMutableDictionary *params = [NSMutableDictionary dictionary];
    
    [manager POST:@"http://localhost:8888/upload_image.php" parameters:params constructingBodyWithBlock:^(id<AFMultipartFormData>  _Nonnull formData) {
        
        // 获取图片数据
        NSData *fileData = UIImageJPEGRepresentation(image, 1.0);
        
        // 设置上传图片的名字
        NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
        formatter.dateFormat = @"yyyyMMddHHmmss";
        NSString *str = [formatter stringFromDate:[NSDate date]];
        NSString *fileName = [NSString stringWithFormat:@"%@.png", str];
        
        [formData appendPartWithFileData:fileData name:@"image" fileName:fileName mimeType:@"image/png"];
        
    } progress:^(NSProgress * _Nonnull uploadProgress) {
        NSLog(@"%@", uploadProgress);
    } success:^(NSURLSessionDataTask * _Nonnull task, id  _Nullable responseObject) {
        // 返回结果
        NSLog(@"%@", responseObject[@"datas"]);
    } failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
        NSLog(@"%@", error);
    }];
}

 

IOS七牛上传图片

阅读数 1769

没有更多推荐了,返回首页