上传图片及多个参数

一:请求格式

 
 
 
Content-Type:image/png \r\n  // 图片类型为png

 Content-Transfer-Encoding: binary\r\n\r\n  // 编码方式
 // 这里是空一行,必不可少!!
 ... contents of boris.png ...  // 图片数据部分

 \r\n--Boundary+72D4CD655314C423--\r\n  // 分隔符后面以"--"结尾,表明结束

二、代码的实现

    __weak typeof(&*self)weakSelf = self;

   UserInfo *userInfo = [UserInfo sharedUserInfo];

    NSMutableDictionary *paramDic = [NSMutableDictionary dictionary];

    paramDic[@"userId"] = userInfo.userId;

    paramDic[@"elderId"] = [NSString stringWithFormat:@"%ld",(long)_model.ID];

    paramDic[@"message"] = textView.text;

    //以上是除图片外的参数的设置

    

    

    //分界线的标识符

   NSString *TWITTERFON_FORM_BOUNDARY = @"AaB03x";

    

   NSString * URLString = [NSString stringWithUTF8String:cHttpMethod[HTTP_COMMAND_ADDCHECKQUERY]];

   NSString *urlStr = [NSString stringWithFormat:@"%@m=%@",URL_BASE,URLString];

 

    NSMutableURLRequest *request = [[NSMutableURLRequest alloc] initWithURL:[NSURL URLWithString:urlStr]];

    

    [request setCachePolicy:NSURLRequestReloadIgnoringLocalCacheData];

    [request setHTTPShouldHandleCookies:NO];

    [request setTimeoutInterval:10];

    [request setHTTPMethod:@"POST"];

    

    

    //分界线 --AaB03x

   NSString *MPboundary=[[NSString alloc]initWithFormat:@"--%@",TWITTERFON_FORM_BOUNDARY];

    //结束符 AaB03x--

   NSString *endMPboundary=[[NSString alloc]initWithFormat:@"%@--",MPboundary];

    

    NSMutableArray *dataMuArr = [NSMutableArray array];

   for (UIImage *image in _images) {

        

       NSData* imageData = UIImageJPEGRepresentation(image, 0.1);

        [dataMuArr addObject:imageData];

    }

   NSData *data = [NSKeyedArchiver archivedDataWithRootObject:dataMuArr];

 

//    //要上传的图片

//    UIImage *image=[_images firstObject];

//    //得到图片的data

//    NSData* data = UIImageJPEGRepresentation(image, 0.1);

    

    

    

    //http body的字符串

    NSMutableString *body=[[NSMutableString alloc]init];

    //参数的集合的所有key的集合

   NSArray *keys= [paramDic allKeys];

    //遍历keys

   for(int i=0;i<[keys count];i++)

    {

        //得到当前key

       NSString *key=[keys objectAtIndex:i];

        //添加分界线,换行

        [body appendFormat:@"%@\r\n",MPboundary];

        //添加字段名称,换2行

        [body appendFormat:@"Content-Disposition: form-data; name="%@"\r\n\r\n",key];

       //添加字段的值

        [body appendFormat:@"%@\r\n",[paramDic objectForKey:key]];

    }

    //添加分界线,换行

    [body appendFormat:@"%@\r\n",MPboundary];

    //声明pic字段,文件名为boris.png

    [body appendFormat:@"Content-Disposition: form-data; name="files"; filename="boris.jpg"\r\n"];

    //声明上传文件的格式

    [body appendFormat:@"Content-Type: image/jpeg\r\n\r\n"];

    //声明结束符:--AaB03x--

   NSString *end=[[NSString alloc]initWithFormat:@"\r\n%@",endMPboundary];

    

    

    

    //声明myRequestData,用来放入http body

    NSMutableData *myRequestData=[NSMutableData data];

    //将body字符串转化为UTF8格式的二进制

    [myRequestData appendData:[body dataUsingEncoding:NSUTF8StringEncoding]];

    //将image的data加入

    [myRequestData appendData:data];

    //加入结束符--AaB03x--

    [myRequestData appendData:[end dataUsingEncoding:NSUTF8StringEncoding]];

    

    

    

    //设置HTTPHeader中Content-Type的值

   NSString *content=[[NSString alloc]initWithFormat:@"multipart/form-data; boundary=%@",TWITTERFON_FORM_BOUNDARY];

    //设置HTTPHeader

    [request setValue:content forHTTPHeaderField:@"Content-Type"];

    //设置Content-Length

    [request setValue:[NSString stringWithFormat:@"%ld",(long) [myRequestData length]] forHTTPHeaderField:@"Content-Length"];

    //设置http body

    [request setHTTPBody:myRequestData];

    

    

    

    //http method

    //1.创建NSURLSession对象(单例)

    NSURLSession *session = [NSURLSession sharedSession];

    //2.创建NSURLSessionDataTask对象

   NSURLSessionDataTask *task = [session dataTaskWithRequest:request completionHandler:^(NSData * _Nullable data, NSURLResponse * _Nullable response, NSError * _Nullable error) {

 

        

       if (error) {

            

           NSLog(@"error:%@",error);

        }else{

            

            NSDictionary *result = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingMutableContainers error:nil];

           NSLog(@"result:%@",result);

         }

    }];

    //3.发送请求(执行数据任务)

    [task resume];

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: SpringBoot支持多个图片上传,可以使用MultipartFile数组实现,具体代码如下: public void uploadImage(MultipartFile[] images) { for (MultipartFile image : images) { // 上传图片 } } ### 回答2: 下面是一个示例的Java Spring Boot代码,用于实现多个图片的上传功能。 ```java @Controller public class FileUploadController { // 设置上传文件的保存路径 @Value("${file.upload-dir}") private String uploadDir; // 映射上传页面 @GetMapping("/upload") public String showUploadForm() { return "upload"; } // 处理上传请求 @PostMapping("/upload") public String handleUpload(@RequestParam("files") MultipartFile[] files) { // 遍历所有上传的文件 for (MultipartFile file : files) { // 忽略空文件 if (file.isEmpty()) { continue; } try { // 获取文件名 String fileName = file.getOriginalFilename(); // 设置文件保存路径 String filePath = uploadDir + fileName; // 保存文件 file.transferTo(new File(filePath)); } catch (IOException e) { e.printStackTrace(); // 处理文件保存失败的情况 } } return "redirect:/upload"; } } ``` 上述代码中,`upload`方法用于上传多个图片文件,使用了`MultipartFile[]`来接收多个上传文件。在`handleUpload`方法中,遍历所有的上传文件,处理每一个文件。首先检查是否为空文件,然后获取文件名和设定的文件保存路径,最后使用`transferTo`方法将文件保存到指定路径。如果保存文件失败,则打印异常信息。 为了使用这个代码,首先需要在Spring Boot的配置文件中设定上传文件保存的路径,例如: ```properties file.upload-dir=/path/to/upload/ ``` 接着,在上传页面中创建一个文件选择表单,指定`enctype`为`multipart/form-data`,例如: ```html <form action="/upload" method="post" enctype="multipart/form-data"> <input type="file" name="files" multiple> <input type="submit" value="Upload"> </form> ``` 在这个表单中,使用`multiple`属性可以让用户选择多个文件进行上传。 ### 回答3: 上传多个图片可以通过使用MultipartFile数组来实现。下面是一个JAVA Spring Boot上传多个图片的示例代码: 首先,在你的Controller类中创建一个POST请求的接口方法,用于处理上传图片请求: ```java @RestController public class ImageUploadController { @PostMapping("/upload") public String handleFileUpload(@RequestParam("files") MultipartFile[] files) { String uploadDir = "upload"; // 上传目录 for (MultipartFile file : files) { String fileName = file.getOriginalFilename(); // 获取上传文件名 // 构建上传文件的目标路径,例如:uploadDir/文件名 String destination = uploadDir + "/" + fileName; try { // 保存文件到服务器 file.transferTo(new File(destination)); } catch (IOException e) { e.printStackTrace(); return "上传失败"; } } return "上传成功"; } } ``` 在上面的代码中,`handleFileUpload`方法接收一个`MultipartFile`数组作为参数,该数组包含了需要上传的所有图片文件。然后,通过遍历数组,获取每个文件的原始文件名,并构建目标路径。最后,将文件保存到服务器的目标路径中。 需要注意的是,你还需要在你的Spring Boot应用程序的配置文件中设置上传文件的临时存储路径,以便文件可以正确保存到指定的目录。可以通过在`application.properties`或`application.yml`文件中添加以下配置来完成: ```properties # 设置上传文件的临时存储路径 spring.servlet.multipart.location=your_upload_directory_path ``` 以上是一个简单的例子,你可以根据自己的需求进行修改和扩展。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值