源码

iOS开发之NSURLSessionUploadTask上传数据

苹果在 iOS9 之后已经废弃了NSURLConnection,NSURLSession成为其替代者,其基本知识网上很多,主要可以从NSURLSessionDataTask 、NSURLSessionDownloadTask 和NSURLSessionUploadTask入手学习。最近在写案例时发现其中的NSURLSessionUploadTask还是有着不少的坑,在开发时有时候很难一次性成功。所以将研究的过程记录与分享一下。我会以一个完整的案例来讲解如何使用。

服务器开发

环境:IDEA 14 +Tomcat 8.x+JDK 8

1、编写服务器端代码
由于上传数据与下载数据不同,下载的时候只要把数据丢进服务器就可以了。但是上传需要服务器自己来处理。所以以Java Servlet来写服务器端,由于Servlet 3.0 以后可以直接处理文件上传,所以相对比较简单,代码如下,注释很详细。

import javax.servlet.ServletException;
import javax.servlet.annotation.MultipartConfig;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.Part;
import java.io.File;
import java.io.IOException;
import java.io.PrintWriter;

@MultipartConfig //标识Servlet支持文件上传
public class UploadServlet extends HttpServlet {

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {

        //存储路径为我们的根目录
        String storePath = req.getServletContext().getRealPath("/");
        //获取part对象,参数为客户端表单中的name属性的值
        Part part = req.getPart("myfile");
        //Servlet3没有提供直接获取文件名的方法,需要从请求头中解析出来
        //获取请求头
        String header = part.getHeader("Content-Disposition");
        //获取文件名
        String fileName = header.substring(header.lastIndexOf("=") + 2, header.length() - 1);
        //把文件写到指定路径
        part.write(storePath + File.separator + fileName);
        //回写数据给客户端
        resp.setCharacterEncoding("UTF-8");
        PrintWriter pw = resp.getWriter();
        pw.print("上传成功");
    }

}

2、部署代码
找到Tomcat根目录下的conf文件夹,打开server.xml,在最后加上一行代码,path就是访问的项目路径,docBase就是项目编译后的位置。

<Context path="/AppTestAPI" docBase="E:/AppTestAPI/out/artifacts/AppTestAPI" auth="Container" /> 

3、启动服务器
通过浏览器访问http://localhost能出现如下的界面,至此完成服务器端工作。( 由于我修改了默认端口,所以没有加8080 )

(0)

本文由 投稿者 创作,文章地址:https://blog.isoyu.com/archives/ioskaifazhinsurlsessionuploadtaskshangchuanshuju-2.html
采用知识共享署名4.0 国际许可协议进行许可。除注明转载/出处外,均为本站原创或翻译,转载前请务必署名。最后编辑时间为:1 月 10, 2019 at 11:28 下午

热评文章

发表回复

[必填]

我是人?

提交后请等待三秒以免造成未提交成功和重复