• 说明: 此处使用PUT请求方式 ... 2.使用NSURLSession+NSURLSessionUploadTask实现文件上传。 ...一、使用NSURLSessionUploadTask实现文件上传: ... 文件上传(put方式) */ - (void)uploadFile{ //1.创建url对象 NS...

    说明:

    此处使用PUT请求方式

    1.增加Authorization头字段,通过服务端账号认证;

    2.使用NSURLSession+NSURLSessionUploadTask实现文件上传。

     

    一、使用NSURLSessionUploadTask实现文件上传:

    /*
     文件上传(put方式)
     */
    - (void)uploadFile{
        //1.创建url对象
        NSURL *url = [NSURL URLWithString:@"url地址"];
        
        //2.创建request对象
        NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url cachePolicy:0 timeoutInterval:2.0f];
        //设置为put方式
        request.HTTPMethod = @"PUT";
        
        //4.设置授权
        //创建账号NSData
        NSData *accountData = [@"yyh:123456" dataUsingEncoding:NSUTF8StringEncoding];
        //对NSData进行base64编码
        NSString *accountStr = [accountData base64EncodedStringWithOptions:0];
        //生成授权字符串
        NSString *authStr = [NSString stringWithFormat:@"BASIC %@", accountStr];
        //增加授权头字段
        [request setValue:authStr forHTTPHeaderField:@"Authorization"];
        
        //5.获取本地文件
        NSURL *file = [[NSBundle mainBundle] URLForResource:@"icon" withExtension:nil];
        
        //6.创建上传任务
        NSURLSession *session = [NSURLSession sharedSession];
        NSURLSessionUploadTask *uploadTask = [session uploadTaskWithRequest:request fromFile:file completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
            
        }];
        
        //7.执行上传
        [uploadTask resume];
    }

     

    展开全文
  • 一般服务器上传数据一般都是用POST请求,这样通过AFNetworking的POST请求稳稳的,但是有一天遇到一个问题,服务器上传数据用的是PUT请求,发现用AFNetworking并不是那么好用,今天就来讲一下如何通过PUT请求上传数据...

    一般服务器上传数据一般都是用POST请求,这样通过AFNetworking的POST请求稳稳的,但是有一天遇到一个问题,服务器上传数据用的是PUT请求,发现用AFNetworking并不是那么好用,今天就来讲一下如何通过PUT请求上传数据。

    什么是PUT请求

    PUT请求是请求服务器存储一个资源,并用Request-URI作为其标识,跟POST类似,但不常用,PUT请求比较少见。HTML表单也不支持这个。本质上来讲, PUT和POST极为相似,都是向服务器发送数据,但它们之间有一个重要区别,PUT通常指定了资源的存放位置,而POST则没有,POST的数据存放位置由服务器自己决定。举个例子:如一个用于提交博文的URL,/addBlog。如果用PUT,则提交的URL会是像这样的”/addBlog/abc123”,其中abc123就是这个博文的地址。而如果用POST,则这个地址会在提交后由服务器告知客户端。目前大部分博客都是这样的。显然,PUT和POST用途是不一样的。具体用哪个还取决于当前的业务场景。

    POST和PUT的请求根本区别

    有的观点认为,应该用POST来创建一个资源,用PUT来更新一个资源;有的观点认为,应该用PUT来创建一个资源,用POST来更新一个资源;还有的观点认为可以用PUT和POST中任何一个来做创建或者更新一个资源。这些观点都只看到了风格,争论起来也只是争论哪种风格更好,其实,用PUT还是POST,不是看这是创建还是更新资源的动作,这不是风格的问题,而是语义的问题。在HTTP中,PUT被定义为idempotent的方法,POST则不是,这是一个很重要的区别。

    在代码中如何应用

    我们先来看看AFNetworking中PUT和POST方法怎么用:

    //POST方法
    - (nullable NSURLSessionDataTask *)POST:(NSString *)URLString
                                 parameters:(nullable id)parameters
                  constructingBodyWithBlock:(nullable void (^)(id <AFMultipartFormData> formData))block
                                   progress:(nullable void (^)(NSProgress *uploadProgress)) uploadProgress
                                    success:(nullable void (^)(NSURLSessionDataTask *task, id _Nullable responseObject))success
                                    failure:(nullable void (^)(NSURLSessionDataTask * _Nullable task, NSError *error))failure;
    
    //PUT方法
    - (nullable NSURLSessionDataTask *)PUT:(NSString *)URLString
                       parameters:(nullable id)parameters
                          success:(nullable void (^)(NSURLSessionDataTask *task, id _Nullable responseObject))success
                          failure:(nullable void (^)(NSURLSessionDataTask * _Nullable task, NSError *error))failure;

    发现参数中只有URLStringparameters,相对于POST请求来说少了一个formData的参数,没有地方把数据拼接上去,我曾经尝试把Data放到parameters中并不好用,在网上搜索了很多也没找到合适的解决办法,只能换一种方式了。

    解决办法

    在用AFNetworking进行PUT请求不好用之后,我想过是否用通过系统NSURLSessionTask来实现PUT请求,但是想想自己写太麻烦了,就尝试着用ASIHTTPRequest来尝试一下,发现ASIHTTPRequest还是很好用的,下面贴出代码:

    - (void)uploadData:(NSData *)data uploadUrl:(NSString *)uploadUrl {    
        ASIHTTPRequest * fileUpRequest = [ASIHTTPRequest requestWithURL:[NSURL URLWithString:uploadUrl]];
        fileUpRequest.delegate = self;
        //设置请求超时时间为60秒
        [fileUpRequest setTimeOutSeconds:60.f];
        //设置请求超时时间后再次尝试请求的次数
        [fileUpRequest setNumberOfTimesToRetryOnTimeout:2];
        //将data拼接进去
        [fileUpRequest appendPostData:data];
        //设置请求方式为PUT
        [fileUpRequest setRequestMethod:@"PUT"];
        //设置上传失败的回调方法
        [fileUpRequest setDidFailSelector:@selector(uploadFailed:)];
        //设置上传成功的回调方法
        [fileUpRequest setDidFinishSelector:@selector(uploadFinished:)];
        //显示精确的上传进度
        fileUpRequest.showAccurateProgress = YES;
        //开始异步请求
        [fileUpRequest startAsynchronous];
    }

    到这里我的问题已经解决,如果大家还有问题可以给我留言解决,谢谢大家的支持。

    我的GitHub地址
    我的个人博客

    展开全文
  • Swift - 从相册中选择照片并上传(使用UIImagePickerController) 2016-05-13 08:35发布:hangge浏览:482 选择本地图片上传是应用开发中一个比较常见的功能。   我们使用 ...

    Swift - 从相册中选择照片并上传(使用UIImagePickerController)

    选择本地图片并上传是应用开发中一个比较常见的功能。
       原文:Swift - 从相册中选择照片并上传(使用UIImagePickerController)   原文:Swift - 从相册中选择照片并上传(使用UIImagePickerController)
    我们使用 UIImagePickerController 可以很方便的从系统“照片”中选择图片,但我们会发现选择完毕后,通过图片的 info[UIImagePickerControllerReferenceURL] 得到的是一个引用路径,格式如下:
    1
    assets-library://asset/asset.PNG?id=90B54369-5E79-433D-B74A-E8E0870EAF27&ext=PNG
    用这个路径是没法上传文件的。想要把选择的图片上传,通常我们会想到如下两种方式:


    方法一:先将图片保存到一个临时文件夹下,再上传
    下面样例在 imagePickerController 选择图片后,使用 fileManager 将其复制保存到应用的文档目录下,再将复制过来的图片上传。
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    import UIKit
    import Alamofire
     
    class ViewControllerUIViewControllerUIImagePickerControllerDelegate,
    UINavigationControllerDelegate {
         
        override func viewDidLoad() {
            super.viewDidLoad()
        }
         
        //选取相册
        @IBAction func fromAlbum(sender: AnyObject) {
            //判断设置是否支持图片库
            if UIImagePickerController.isSourceTypeAvailable(.PhotoLibrary){
                //初始化图片控制器
                let picker = UIImagePickerController()
                //设置代理
                picker.delegate = self
                //指定图片控制器类型
                picker.sourceType = UIImagePickerControllerSourceType.PhotoLibrary
                //弹出控制器,显示界面
                self.presentViewController(picker, animated: true, completion: {
                    () -> Void in
                })
            }else{
                print("读取相册错误")
            }
             
        }
         
        //选择图片成功后代理
        func imagePickerController(picker: UIImagePickerController,
                                   didFinishPickingMediaWithInfo info: [String AnyObject]) {
            //获取选择的原图
            let pickedImage = info[UIImagePickerControllerOriginalImageasUIImage
            
            //将选择的图片保存到Document目录下
            let fileManager = NSFileManager.defaultManager()
            let rootPath = NSSearchPathForDirectoriesInDomains(.DocumentDirectory,
                                                               .UserDomainMasktrue)[0] as String
            let filePath = "\(rootPath)/pickedimage.jpg"
            let imageData = UIImageJPEGRepresentation(pickedImage, 1.0)
            fileManager.createFileAtPath(filePath, contents: imageData, attributes: nil)
             
            //上传图片
            if (fileManager.fileExistsAtPath(filePath)){
                //取得NSURL
                let imageNSURL:NSURL NSURL.init(fileURLWithPath: filePath)
                 
                //使用Alamofire上传
                Alamofire.upload(.POST"http://www.hangge.com/upload.php", file: imageNSURL)
                    .responseString { response in
                    print("Success: \(response.result.isSuccess)")
                    print("Response String: \(response.result.value)")
                }
            }
            
            //图片控制器退出
            picker.dismissViewControllerAnimated(true, completion:nil)
        }
         
        override func didReceiveMemoryWarning() {
            super.didReceiveMemoryWarning()
        }
    }
    不管使用模拟器还是真机调试,运行后可以看到图片上传成功了:
    原文:Swift - 从相册中选择照片并上传(使用UIImagePickerController)


    方法二:使用PhotoKit获取选择图片的真实路径,再上传
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    在这里留下你想说的话。import UIKit
    import Alamofire
    import Photos
     
    class ViewControllerUIViewControllerUIImagePickerControllerDelegate,
    UINavigationControllerDelegate {
         
        override func viewDidLoad() {
            super.viewDidLoad()
        }
         
        //选取相册
        @IBAction func fromAlbum(sender: AnyObject) {
            //判断设置是否支持图片库
            if UIImagePickerController.isSourceTypeAvailable(.PhotoLibrary){
                //初始化图片控制器
                let picker = UIImagePickerController()
                //设置代理
                picker.delegate = self
                //指定图片控制器类型
                picker.sourceType = UIImagePickerControllerSourceType.PhotoLibrary
                //弹出控制器,显示界面
                self.presentViewController(picker, animated: true, completion: {
                    () -> Void in
                })
            }else{
                print("读取相册错误")
            }
             
        }
         
        //选择图片成功后代理
        func imagePickerController(picker: UIImagePickerController,
                                   didFinishPickingMediaWithInfo info: [String AnyObject]) {
            //选择图片的引用路径
            let pickedURL:NSURL = info[UIImagePickerControllerReferenceURLasNSURL
            let fetchResult: PHFetchResult PHAsset.fetchAssetsWithALAssetURLs([pickedURL],
                                                                                options: nil)
            let asset: PHAsset = fetchResult.firstObject asPHAsset
             
            PHImageManager.defaultManager()
                .requestImageDataForAsset(asset, options: nil, resultHandler: {
                (imageData: NSData?, dataUTI: String?, orientation: UIImageOrientation,
                info: [NSObject AnyObject]?) in
                //获取实际路径
                let imageNSURL: NSURL = info!["PHImageFileURLKey"asNSURL
                print("路径:",imageNSURL)
                print("文件名:",imageNSURL.lastPathComponent)
                 
                //使用Alamofire上传
                Alamofire.upload(.POST"http://www.hangge.com/upload.php", file: imageNSURL)
                    .responseString { response in
                    print("Success: \(response.result.isSuccess)")
                    print("Response String: \(response.result.value)")
                }
            })
      
            //图片控制器退出
            picker.dismissViewControllerAnimated(true, completion:nil)
        }
         
        override func didReceiveMemoryWarning() {
            super.didReceiveMemoryWarning()
        }
    }
    使用模拟器运行后,可以看到图片上传成功了:
    原文:Swift - 从相册中选择照片并上传(使用UIImagePickerController)

    但如果使用真机调试的话,虽然我们得到了图片的真实路径和文件名,但还是无法上传。所以上传图片还是建议使用方法一。
    原文:Swift - 从相册中选择照片并上传(使用UIImagePickerController)



    附录:
    (1)本文样例使用 Alamofire 上传文件,对于Alamofire不熟悉的可参考我原来写过的几篇文章:
    Swift - HTTP网络操作库Alamofire使用详解1(配置,以及数据请求)
    Swift - HTTP网络操作库Alamofire使用详解2(文件上传)
    (2)服务端php代码如下:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    <?php 
    /** php 接收流文件
    * @param  String  $file 接收后保存的文件名
    * @return boolean
    */
    function receiveStreamFile($receiveFile){   
        $streamData = isset($GLOBALS['HTTP_RAW_POST_DATA'])? $GLOBALS['HTTP_RAW_POST_DATA'] : ''
        
        if(empty($streamData)){ 
            $streamData file_get_contents('php://input'); 
        
        
        if($streamData!=''){ 
            $ret file_put_contents($receiveFile$streamData, true); 
        }else
            $ret = false; 
        
       
        return $ret;   
      
    //定义服务器存储路径和文件名
    $receiveFile =  $_SERVER["DOCUMENT_ROOT"]."/uploadFiles/hangge.zip"
    $ret = receiveStreamFile($receiveFile); 
    echo json_encode(array('success'=>(bool)$ret)); 
    ?>

    原文出自:www.hangge.com  转载请保留原文链接:http://www.hangge.com/blog/cache/detail_1174.html
    展开全文
  • 选择本地图片上传是应用开发中一个比较常见的功能。 原文出自:www.hangge.com转载请保留原文链接:http://www.hangge.com/blog/cache/detail_1174.html 我们使用UIImagePickerController可以很方便的从系统...
    选择本地图片并上传是应用开发中一个比较常见的功能。
       原文:Swift - 从相册中选择照片并上传(使用UIImagePickerController)   原文:Swift - 从相册中选择照片并上传(使用UIImagePickerController)

    原文出自:www.hangge.com  转载请保留原文链接:http://www.hangge.com/blog/cache/detail_1174.html
    我们使用 UIImagePickerController 可以很方便的从系统“照片”中选择图片,但我们会发现选择完毕后,通过图片的 info[UIImagePickerControllerReferenceURL] 得到的是一个引用路径,格式如下:
    1
    assets-library://asset/asset.PNG?id=90B54369-5E79-433D-B74A-E8E0870EAF27&ext=PNG
    用这个路径是没法上传文件的。想要把选择的图片上传,通常我们会想到如下两种方式:
     
     
    方法一:先将图片保存到一个临时文件夹下,再上传
    下面样例在 imagePickerController 选择图片后,使用 fileManager 将其复制保存到应用的文档目录下,再将复制过来的图片上传。
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    import UIKit
    import Alamofire
     
    class ViewControllerUIViewControllerUIImagePickerControllerDelegate,
    UINavigationControllerDelegate {
         
        override func viewDidLoad() {
            super.viewDidLoad()
        }
         
        //选取相册
        @IBAction func fromAlbum(sender: AnyObject) {
            //判断设置是否支持图片库
            if UIImagePickerController.isSourceTypeAvailable(.PhotoLibrary){
                //初始化图片控制器
                let picker = UIImagePickerController()
                //设置代理
                picker.delegate = self
                //指定图片控制器类型
                picker.sourceType = UIImagePickerControllerSourceType.PhotoLibrary
                //弹出控制器,显示界面
                self.presentViewController(picker, animated: true, completion: {
                    () -> Void in
                })
            }else{
                print("读取相册错误")
            }
             
        }
         
        //选择图片成功后代理
        func imagePickerController(picker: UIImagePickerController,
                                   didFinishPickingMediaWithInfo info: [String AnyObject]) {
            //获取选择的原图
            let pickedImage = info[UIImagePickerControllerOriginalImageasUIImage
            
            //将选择的图片保存到Document目录下
            let fileManager = NSFileManager.defaultManager()
            let rootPath = NSSearchPathForDirectoriesInDomains(.DocumentDirectory,
                                                               .UserDomainMasktrue)[0] as String
            let filePath = "\(rootPath)/pickedimage.jpg"
            let imageData = UIImageJPEGRepresentation(pickedImage, 1.0)
            fileManager.createFileAtPath(filePath, contents: imageData, attributes: nil)
             
            //上传图片
            if (fileManager.fileExistsAtPath(filePath)){
                //取得NSURL
                let imageNSURL:NSURL NSURL.init(fileURLWithPath: filePath)
                 
                //使用Alamofire上传
                Alamofire.upload(.POST"http://www.hangge.com/upload.php", file: imageNSURL)
                    .responseString { response in
                    print("Success: \(response.result.isSuccess)")
                    print("Response String: \(response.result.value)")
                }
            }
            
            //图片控制器退出
            picker.dismissViewControllerAnimated(true, completion:nil)
        }
         
        override func didReceiveMemoryWarning() {
            super.didReceiveMemoryWarning()
        }
    }
    不管使用模拟器还是真机调试,运行后可以看到图片上传成功了:
    原文:Swift - 从相册中选择照片并上传(使用UIImagePickerController)


    方法二:使用PhotoKit获取选择图片的真实路径,再上传
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    在这里留下你想说的话。import UIKit
    import Alamofire
    import Photos
     
    class ViewControllerUIViewControllerUIImagePickerControllerDelegate,
    UINavigationControllerDelegate {
         
        override func viewDidLoad() {
            super.viewDidLoad()
        }
         
        //选取相册
        @IBAction func fromAlbum(sender: AnyObject) {
            //判断设置是否支持图片库
            if UIImagePickerController.isSourceTypeAvailable(.PhotoLibrary){
                //初始化图片控制器
                let picker = UIImagePickerController()
                //设置代理
                picker.delegate = self
                //指定图片控制器类型
                picker.sourceType = UIImagePickerControllerSourceType.PhotoLibrary
                //弹出控制器,显示界面
                self.presentViewController(picker, animated: true, completion: {
                    () -> Void in
                })
            }else{
                print("读取相册错误")
            }
             
        }
         
        //选择图片成功后代理
        func imagePickerController(picker: UIImagePickerController,
                                   didFinishPickingMediaWithInfo info: [String AnyObject]) {
            //选择图片的引用路径
            let pickedURL:NSURL = info[UIImagePickerControllerReferenceURLasNSURL
            let fetchResult: PHFetchResult PHAsset.fetchAssetsWithALAssetURLs([pickedURL],
                                                                                options: nil)
            let asset: PHAsset = fetchResult.firstObject asPHAsset
             
            PHImageManager.defaultManager()
                .requestImageDataForAsset(asset, options: nil, resultHandler: {
                (imageData: NSData?, dataUTI: String?, orientation: UIImageOrientation,
                info: [NSObject AnyObject]?) in
                //获取实际路径
                let imageNSURL: NSURL = info!["PHImageFileURLKey"asNSURL
                print("路径:",imageNSURL)
                print("文件名:",imageNSURL.lastPathComponent)
                 
                //使用Alamofire上传
                Alamofire.upload(.POST"http://www.hangge.com/upload.php", file: imageNSURL)
                    .responseString { response in
                    print("Success: \(response.result.isSuccess)")
                    print("Response String: \(response.result.value)")
                }
            })
      
            //图片控制器退出
            picker.dismissViewControllerAnimated(true, completion:nil)
        }
         
        override func didReceiveMemoryWarning() {
            super.didReceiveMemoryWarning()
        }
    }
    使用模拟器运行后,可以看到图片上传成功了:
    原文:Swift - 从相册中选择照片并上传(使用UIImagePickerController)
    但如果使用真机调试的话,虽然我们得到了图片的真实路径和文件名,但还是无法上传。所以上传图片还是建议使用方法一。
    原文:Swift - 从相册中选择照片并上传(使用UIImagePickerController)

     
     
    附录:
    (1)本文样例使用 Alamofire 上传文件,对于Alamofire不熟悉的可参考我原来写过的几篇文章:
    Swift - HTTP网络操作库Alamofire使用详解1(配置,以及数据请求)
    Swift - HTTP网络操作库Alamofire使用详解2(文件上传)
    (2)服务端php代码如下:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    <?php
    /** php 接收流文件
    * @param  String  $file 接收后保存的文件名
    * @return boolean
    */
    function receiveStreamFile($receiveFile){  
        $streamData = isset($GLOBALS['HTTP_RAW_POST_DATA'])? $GLOBALS['HTTP_RAW_POST_DATA'] : '';
        
        if(empty($streamData)){
            $streamData file_get_contents('php://input');
        }
        
        if($streamData!=''){
            $ret file_put_contents($receiveFile$streamData, true);
        }else{
            $ret = false;
        }
       
        return $ret;  
    }
      
    //定义服务器存储路径和文件名
    $receiveFile =  $_SERVER["DOCUMENT_ROOT"]."/uploadFiles/hangge.zip";
    $ret = receiveStreamFile($receiveFile);
    echo json_encode(array('success'=>(bool)$ret));
    ?>


    原文出自:www.hangge.com  转载请保留原文链接:http://www.hangge.com/blog/cache/detail_1174.html

    转载于:https://www.cnblogs.com/AnnieBabygn/p/6489680.html

    展开全文
  • 1.引入oss依赖 <dependency> <groupId>com.aliyun.oss</groupId> <artifactId>aliyun-sdk-oss</artifactId> <version>3.8.0</version> <...2.引...

    1.引入oss依赖

    <dependency>
        <groupId>com.aliyun.oss</groupId>
        <artifactId>aliyun-sdk-oss</artifactId>
        <version>3.8.0</version>
    </dependency>
    

    2.引入图片上传依赖

    <dependency>
        <groupId>commons-fileupload</groupId>
        <artifactId>commons-fileupload</artifactId>
        <version>1.3.1</version>
    </dependency>
    <dependency>
        <groupId>commons-io</groupId>
        <artifactId>commons-io</artifactId>
        <version>2.3</version>
    </dependency>
    

    3.在mvc中配置上传解析器

    <!--配置文件上传解析器-->
    <bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
        <property name="defaultEncoding" value="UYF-8"/>
        <property name="maxUploadSize" value="500000"/>
    </bean>
    

    4.前段代码

    <%@ page contentType="text/html;charset=UTF-8" language="java"  isELIgnored="false" %>
    <html>
    <head>
        <title>Title</title>
    </head>
    <body>
    <form action="${pageContext.request.contextPath}/user/quick14" method="POST" enctype="multipart/form-data">
        <input type="text" name="name" >
        <input type="file" name="file1">
        <input type="submit" name="提交">
    </form>
    <br>
    <form action="${pageContext.request.contextPath}/user/quick15" method="POST" enctype="multipart/form-data">
        <input type="text" name="name" >
        <input type="file" name="file">
        <input type="submit" name="提交">
    </form>
    </body>
    </html>
    

    5.后端代码

    package com.itheima.controller;
    
    import com.aliyun.oss.OSS;
    import com.aliyun.oss.OSSClientBuilder;
    import org.springframework.stereotype.Controller;
    import org.springframework.web.bind.annotation.RequestMapping;
    import org.springframework.web.bind.annotation.ResponseBody;
    import org.springframework.web.multipart.MultipartFile;
    import java.io.ByteArrayInputStream;
    import java.io.IOException;
    
    @Controller
    @RequestMapping("/user")
    public class UserController {
    
    	// Endpoint以杭州为例,其它Region请按实际情况填写。
    	String endpoint = "http://oss-cn-hangzhou.aliyuncs.com";
    	// 阿里云主账号AccessKey拥有所有API的访问权限,风险很高。强烈建议您创建并使用RAM账进行API访问或日常运维,请登录 https://ram.console.aliyun.com 创建RAM账号。
    	String accessKeyId = "<yourAccessKeyId>";
    	String accessKeySecret = "<yourAccessKeySecret>";
    	String bucketName = "<yourBucketName>";
    
        /*
         * 图片上传
         * */
        @RequestMapping("/quick14")
        @ResponseBody
        public void quick14(String name, MultipartFile file1) throws IOException {
        	//oss对象
            OSS ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret);
            //图片名称
            String fileKey = "jiajia.jpg"; 
            //ByteArrayInputStream(file1.getBytes())将文件转为输入流
            ossClient.putObject(bucketName, fileKey, new ByteArrayInputStream(file1.getBytes()));
        }
    }
    
    展开全文
  • Alamofire是原AFNetworking团队针对Swift语言封装的网络请求库,相较于AF基本不...针对AF框架存在的内存泄漏解决方案,博客园有很多文章,尤其是文件、图片上传导致的内存泄漏。具体可参考:[AFHTTPSessionManager m...
  • 用的CocoaPods导入SDK platform :ios,'9.0' target '项目名' do pod 'AFNetworking' pod 'Qiniu' end 导入头文件 #import&lt;QiniuSDK.h&gt; #import&lt;...ComminCrypto...
  • 原创blog,转载请注明出处 blog.csdn.net/hello_hwc前言: UploadTask继承自DataTask。...所以,用UploadTask来做的事情,通常直接用DataTask也可以实现。不过,能使用封装好的API会省去很多事情,何乐而不为呢?...
  • 对象存储Swift介绍

    2013-09-09 16:38:45
    OpenStack Object Storage(Swift)是OpenStack开源云计算项目的子项目之一,被称为对象存储,提供了强大的扩展性、冗余和持久性。本文将从架构、原理和实践等几方面讲述SwiftSwift并不是文件系统或者实时的数据...
  • AFNetworking 3 批量上传图片的 3 种方法 转载自:http://www.jianshu.com/p/2cb9136c837a AFNetworking 在去年年底升级到了 3.0。这个版本更新想必有很多好处,然而让我吃惊的是,它并没有 batch request ...
  • iOS 七牛多张图片上传

    2019-09-23 02:23:55
    -(void)uploadImages:(NSArray *)images atIndex:(NSInteger)index token:(NSString *)token uploadManager:(QNUploadManager *)uploadManager keys:(NSMutableArray *)keys{ UIImage *image = images[i...
  • 在上传图片的过程中 我们经常上传一张图片的同时还要上传 其他一些附加信息 这里我是使用Retrofit 进行图片上传的 这里我就 已经认为你会Retrofit的基本使用了 现在上关键代码  1. MultipartBody.Builder form = ...
  • 为什么要自己实现七牛文件的批量上传在使用七牛云存储服务的过程中,想要在手机客户端进行图片、视频等文件的上传,只需要直接引入SDK,然后使用QiniuSDK即可。对于iOS端的上传特别简单,只需要使用pod引入SDK:pod ...
  • OpenStack Swift学习笔记

    2014-01-10 10:31:10
    OpenStack Object Storage(Swift)是OpenStack开源云计算项目的子项目之一。Swift的目的是使用普通硬件来构建冗余的、可扩展的分布式对象存储集群,存储容量可达PB级。 Swift并不是文件系统或者实时的数据存储系统...
  • 七牛上传文件 图片

    2015-10-30 15:51:47
    很简单 按照官方的原代码: NSString token = @"从服务端SDK获取"; QNUploadManager *upManager = [[QNUploadManager alloc] init]; NSData *data = [@"Hello, World!... dataUsingEncoding : NSUTF8StringEncoding];
  • 首先,pod导入阿里云SDK; pod 'AliyunOSSiOS' 其次,配置SDK: NSString *accessKey = @"你从阿里云控制台拿到的key"; NSString *secretKey = @"你从阿里云控制台拿到的key"; NSString *endpoint = @...
  • 开始把自己做过的项目尝试用swift语言写了一遍,学习全新的语法和设计模式,由于学习Swift的时间比较短,今天主要简单说一下如何在Swift 工程中使用时下比较流行的AFNetworking请求框架。 由于目前AF
  • SWIFT API 使用文档

    2013-05-09 15:05:42
    OpenStack Object Storage (Swift) 是用来创建冗余的、可扩展的对象存储(引擎)的开源软件。 swift使用标准化的服务器存储 PB 级的访问数据。它并不是文件系统或者实时的数据存储系统 ,而是一个用于存储永久类型的
  • 1. 将图片转换为Base64编码,POST上传。PHP将Base64解码为二进制,再写出文件。缺点:不能上传较大的图片 // iOS(Swift) func upload(image: UIImage, url: String) { let imageData = UIImageJPEGRepresentation...
  • OpenStack Object Storage(Swift)是OpenStack开源云计算项目的子项目之一,被称为对象存储,提供了强大的扩展性、冗余和持久性。本文将从架构、原理和实践等几方面讲述SwiftSwift并不是文件系统或者实时的数据...
1 2 3 4 5 ... 13
收藏数 260
精华内容 104