苹果在 iOS9 之后已经废弃了NSURLConnection,NSURLSession成为其替代者,其基本知识网上很多,主要可以从NSURLSessionDataTask 、NSURLSessionDownloadTask 和NSURLSessionUploadTask入手学习。最近在写案例时发现其中的NSURLSessionUploadTask还是有着不少的坑,在开发时有时候很难一次性成功。所以将研究的过程记录与分享一下。我会以一个完整的案例来讲解如何使用。
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 )
本文由 投稿者 创作,文章地址:https://blog.isoyu.com/archives/ioskaifazhinsurlsessionuploadtaskshangchuanshuju-2.html
采用知识共享署名4.0 国际许可协议进行许可。除注明转载/出处外,均为本站原创或翻译,转载前请务必署名。最后编辑时间为:1 月 10, 2019 at 11:28 下午