`
lily_better
  • 浏览: 7874 次
文章分类
社区版块
存档分类
最新评论

利用HttpURLConnection发送post请求上传多个文件

 
阅读更多
本文要用java.net.HttpURLConnection来实现多个文件上传

1. 研究 form 表单到底封装了什么样的信息发送到servlet。

假如我参数写的内容是hello word,然后二个文件是二个简单的txt文件,form提交的信息为:
Content-Disposition: form-data; name="username"    
    
hello word    
-----------------------------7da2e536604c8    
Content-Disposition: form-data; name="file1"; filename="D:/haha.txt"    
Content-Type: text/plain    
    
haha    
  hahaha    
-----------------------------7da2e536604c8    
Content-Disposition: form-data; name="file2"; filename="D:/huhu.txt"    
Content-Type: text/plain    
    
messi     
huhu    
-----------------------------7da2e536604c8--    


研究下规律发现有如下几点特征

1.第一行是“ -----------------------------7d92221b604bc ”作为分隔符,然后是“ /r/n ” 回车换行符。 这个7d92221b604bc 分隔符浏览器是随机生成的。

2.第二行是Content-Disposition: form-data; name="file2"; filename="D:/huhu.txt";name=对应input的name值,filename对应要上传的文件名(包括路径在内),

3.第三行如果是文件就有Content-Type: text/plain;这里上传的是txt文件所以是text/plain,如果上穿的是jpg图片的话就是image/jpg了,可以自己试试看看。

然后就是回车换行符。

4.在下就是文件或参数的内容或值了。如:hello word。

5.最后一行是-----------------------------7da2e536604c8--,注意最后多了二个--;

有了这些就可以使用HttpURLConnection来实现上传文件功能了
		private void upload(String[] uploadFiles, String actionUrl) {
        String end = "/r/n";
        String twoHyphens = "--";
        String boundary = "*****";
        try {
            URL url = new URL(actionUrl);
            HttpURLConnection con = (HttpURLConnection) url.openConnection();
             // 发送POST请求必须设置如下两行  
            con.setDoInput(true);
            con.setDoOutput(true);
            con.setUseCaches(false);
            con.setRequestMethod("POST");
            con.setRequestProperty("Connection", "Keep-Alive");
            con.setRequestProperty("Charset", "UTF-8");
            con.setRequestProperty("Content-Type",
                    "multipart/form-data;boundary=" + boundary);
            DataOutputStream ds =
                    new DataOutputStream(con.getOutputStream());
            for (int i = 0; i < uploadFiles.length; i++) {
                String uploadFile = uploadFiles[i];
                String filename = uploadFile.substring(uploadFile.lastIndexOf("//") + 1);
                ds.writeBytes(twoHyphens + boundary + end);
                ds.writeBytes("Content-Disposition: form-data; " +
                        "name=/"file" + i + "/";filename=/"" +
                        filename + "/"" + end);
                ds.writeBytes(end);
                FileInputStream fStream = new FileInputStream(uploadFile);
                int bufferSize = 1024;
                byte[] buffer = new byte[bufferSize];
                int length = -1;
                while ((length = fStream.read(buffer)) != -1) {
                    ds.write(buffer, 0, length);
                }
                ds.writeBytes(end);
                /* close streams */
                fStream.close();
            }
            ds.writeBytes(twoHyphens + boundary + twoHyphens + end);
            ds.flush();
            // 定义BufferedReader输入流来读取URL的响应  
            InputStream is = con.getInputStream();
            int ch;
            StringBuffer b = new StringBuffer();
            while ((ch = is.read()) != -1) {
                b.append((char) ch);
            }
            String s = b.toString();
            if (s.contains("successfully")) {
                // for (int i = 1; i < 5; i++) {
                int beginIndex = s.indexOf("url =") + 5;
                int endIndex = s.indexOf("/n", beginIndex);
                String urlStr = s.substring(beginIndex, endIndex).trim();
                System.out.println(urlStr);
                // }
            }
            ds.close();
        } catch (Exception e) {
        }
    }

分享到:
评论

相关推荐

    Java利用HttpURLConnection发送post请求上传文件.docx

    在Java编程中,发送POST请求并上传文件是一个常见的任务,特别是在与服务器进行数据交互时。在本场景中,我们使用`HttpURLConnection`类来实现这一功能。`HttpURLConnection`是Java标准库提供的一种网络连接接口,它...

    java实现多次HttpURLConnection共享session

    总结来说,Java实现多次HttpURLConnection共享session的关键在于正确处理Cookie,保存服务器返回的Session ID,并在后续请求中携带这个ID。通过这种方式,即使没有浏览器环境,也能模拟登录状态,爬取登录后的内容。...

    HttpURLConnection servlet 多文件参数 断点上传

    在处理文件上传时,我们通常需要设置请求方法为POST或PUT,并使用`setDoOutput(true)`开启输出流,以便向服务器发送数据。 Servlet是Java Web开发中的重要组件,用于接收和响应HTTP请求。在处理文件上传时,Servlet...

    Http学习之使用HttpURLConnection发送post和get请求 android

    本篇文章主要聚焦于使用`HttpURLConnection`类...总结,本文介绍了使用`HttpURLConnection`在Android中发送GET和POST请求的基本步骤,以及需要注意的关键点。理解这些概念有助于开发者在构建网络功能时做出明智的选择。

    本示例使用HttpUrlConnection实现上传文件

    - **并发上传**:如果需要上传多个文件,可以考虑使用线程或异步任务来实现并发上传。 通过理解以上步骤和注意事项,开发者可以有效地利用HttpURLConnection在Android应用中实现代理文件上传功能。同时,了解服务器...

    使用HttpUrlConnection实现上传文件 服务器端代码

    - 解析请求,`ServletFileUpload.parseRequest(request)`将返回一个`FileItemIterator`,可以遍历每个上传的文件或表单字段。 - 对于每个`FileItemStream`,我们可以获取文件名,打开输入流,然后将内容保存到...

    Java自带的HttpURLConnection访问接口实现文件上传

    对于POST请求,我们通常使用多部分/形式数据(Multipart/form-data)编码来传输文件,这是HTML表单上传文件的标准方式。 1. **配置连接**: 在Java中,我们首先创建HttpURLConnection实例,设置连接属性,例如设置...

    Android httpUrlConnection Post方式访问网络简单demo

    这个简单的示例对于初学者理解Android中使用`HttpURLConnection`发送POST请求非常有用,但实际应用中可能还需要考虑其他因素,如错误处理、HTTPS支持、多线程请求等。记住,网络操作应在子线程中进行,以避免阻塞UI...

    HttpURLConnection文件下载\httpURLConnection文件下载

    通过设置`setDoOutput(true)`表明这是一个POST请求,但实际上对于文件下载,通常使用GET请求。然后通过`connect()`方法建立连接。 `setConnectTimeout()`和`setReadTimeout()`可以设置超时时间,防止在网络状况差时...

    HttpURLConnection读取本地目录上传远程服务器

    4. **设置输出流**:POST请求需要通过输出流写入数据,调用`setDoOutput(true)`。 5. **设置请求属性**:可能需要设置`Content-Type`(例如`application/octet-stream`,表明上传的是二进制数据),以及`Content-...

    java post文件流的操作

    根据提供的文件信息,...以上就是从给定文件的标题、描述、标签以及部分内容中总结出来的知识点,涵盖了Java POST请求发送与接收文件流的基础操作以及Spring MVC中处理文件上传的相关内容。希望这些信息对你有所帮助。

    java后台调用HttpURLConnection类模拟浏览器请求实例(可用于接口调用)

    `httpURLConnectionPOST()`方法展示了POST请求的处理方式,通过设置`setDoOutput(true)`开启输出流,但示例中并未写入实际的POST数据。 在实际应用中,可能需要添加更多的配置,比如设置请求头(如`Content-Type`,...

    android发送post请求获取json字符串

    总结来说,Android发送POST请求获取JSON字符串涉及到网络请求的实现、参数封装、请求发送、JSON解析以及错误处理等多个环节。选择合适的网络库能提高效率,而合理处理服务器返回的数据则能提升用户体验。在实际项目...

    HttpURLConnection OKHttp实现请求

    实际项目中,可能需要根据需求进行更多的定制,如处理POST请求、添加请求头、使用异步请求等。 总结,`HttpURLConnection`虽然基础,但在现代应用中可能显得不够灵活。相比之下,`OKHttp`提供了更高级的功能,更...

    android原生post请求源码

    在提供的`PostRequestDemo`文件中,可能包含了具体的POST请求实现示例,你可以查阅这些代码,加深对Android原生POST请求的理解。如果遇到问题,可以参考上述步骤或访问链接中的博客文章获取更多信息。

    android 文件上传(多个或单个),图片上传

    多文件上传通常采用Multipart形式,如HTTP的POST请求。Android的`HttpURLConnection`或第三方库如Volley、Retrofit都可以处理这种请求。Multipart数据包含一个或多个部分,每个部分包含文件的二进制数据和元数据(如...

    android 联网请求的两种方式HttpURLConnection和HttpClient

    在Android开发中,联网请求是应用与...理解这两种方法的工作原理以及如何处理GET和POST请求,是每个Android开发者必备的技能。在实际开发中,还可以结合使用第三方库,如Retrofit、OkHttp等,以简化网络请求的处理。

    java发送http/https请求(get/post)代码

    以下是一个使用HttpClient发送POST请求的例子: ```java CloseableHttpClient httpClient = HttpClients.createDefault(); HttpPost httpPost = new HttpPost("https://example.com"); List&lt;NameValuePair&gt; params ...

    利用HttpURLConnection进行手机号段归属地数据采集

    综上所述,利用HttpURLConnection进行数据采集涉及到网络编程、HTTP协议、HTML解析、正则表达式、多线程以及良好的编程设计原则等多个方面。在实际项目中,还需要考虑异常处理、性能优化、数据存储和安全性等问题,...

    JAVA发送HTTP请求,返回HTTP响应内容

    这个类通常包含多个方法,用于执行GET和POST请求,并可能包含其他HTTP方法,如PUT、DELETE等。在提供的代码中,`HttpRequester`包含了发送GET和POST请求的方法,它们都调用了同一个内部方法`send()`进行处理。 `...

Global site tag (gtag.js) - Google Analytics