C# 上传文件到 Java(struts2)端示例
来源:互联网 发布:淘宝广场舞服装春装 编辑:程序博客网 时间:2024/05/22 02:06
C#通过Http协议上传文件的示例比较多,在此贴一个,也是从网上查的,当时查到了好几个版本,应该都可以用,我的当时Java端用的apache的common upload,但是从Request中解析不到文件内容,因为是拷贝之前的代码,没有问题,所以误认为是C#端的问题,换了几种方式都不行,最后发现是因为struts2对Request进行处理后,在用common upload解析就得不到想要的内容了。
C#上传文件:
public static string HttpUploadFile(string url, string[] files, NameValueCollection data, Encoding encoding) { string boundary = "---------------------------" + DateTime.Now.Ticks.ToString("x"); byte[] boundarybytes = Encoding.ASCII.GetBytes("\r\n--" + boundary + "\r\n"); byte[] endbytes = Encoding.ASCII.GetBytes("\r\n--" + boundary + "--\r\n"); //1.HttpWebRequest HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url); request.ContentType = "multipart/form-data; boundary=" + boundary; request.Method = "POST"; request.KeepAlive = true; request.Credentials = CredentialCache.DefaultCredentials; using (Stream stream = request.GetRequestStream()) { //1.1 key/value string formdataTemplate = "Content-Disposition: form-data; name=\"{0}\"\r\n\r\n{1}"; if (data != null) { foreach (string key in data.Keys) { stream.Write(boundarybytes, 0, boundarybytes.Length); string formitem = string.Format(formdataTemplate, key, data[key]); byte[] formitembytes = encoding.GetBytes(formitem); stream.Write(formitembytes, 0, formitembytes.Length); } } //1.2 file string headerTemplate = "Content-Disposition: form-data; name=\"{0}\"; filename=\"{1}\"\r\nContent-Type: application/octet-stream\r\n\r\n"; byte[] buffer = new byte[4096]; int bytesRead = 0; for (int i = 0; i < files.Length; i++) { stream.Write(boundarybytes, 0, boundarybytes.Length); string header = string.Format(headerTemplate, "file" + i, Path.GetFileName(files[i])); byte[] headerbytes = encoding.GetBytes(header); stream.Write(headerbytes, 0, headerbytes.Length); using (FileStream fileStream = new FileStream(files[i], FileMode.Open, FileAccess.Read)) { while ((bytesRead = fileStream.Read(buffer, 0, buffer.Length)) != 0) { stream.Write(buffer, 0, bytesRead); } } } //1.3 form end stream.Write(endbytes, 0, endbytes.Length); } //2.WebResponse HttpWebResponse response = (HttpWebResponse)request.GetResponse(); using (StreamReader stream = new StreamReader(response.GetResponseStream())) { return stream.ReadToEnd(); } }
Java端处理:
因为Struts2会解析一次Request,所以在上传文件的方法中为了让common upload起作用,就不能使用struts2的解析器,需要跳过它,方法是在struts.xml配置文件中配置如下代码:
<constant name="struts.multipart.handler" value="myRequestParser" /><!--指定自己的实现类--><bean type="org.apache.struts2.dispatcher.multipart.MultiPartRequest" name="myRequestParser" class="com.**.MyRequestParser" scope="default" optional="true" />自己的实现类,空的就行:
import java.io.IOException;import org.apache.struts2.dispatcher.multipart.JakartaMultiPartRequest;import javax.servlet.http.HttpServletRequest;public class MyRequestParser extends JakartaMultiPartRequest{public void parse(HttpServletRequest servletRequest, String saveDir)throws IOException{}}
阅读全文
0 0
- C# 上传文件到 Java(struts2)端示例
- Struts2上传文件示例
- struts2上传文件示例
- Struts2上传文件示例
- jap+java+struts2文件上传到服务器
- Struts2上传文件示例 【转】
- Struts2上传文件示例 【转】
- struts2文件上传简单示例
- 文件上传示例(上传到amazon s3服务器)
- java struts2 文件上传
- Struts2入门(11):文件上传与单文件/多文件上传示例
- JS+Struts2多文件上传完整示例
- Struts2实现单个文件上传的示例
- Struts2文件上传的简单示例
- 基于struts2的文件上传示例
- struts2示例代码-多个文件上传
- Struts2文件上传原理及示例详解
- java框架之struts2(文件上传)
- Python基础小笔记《2017-10-07》
- Java打印任意数组元素出现的次数
- 读后感系列-4.《黄金是怎样炼成的》徐小平/乔慧存
- 零基础入门深度学习(2)
- 通过继承HttpServlet来开发Servlet
- C# 上传文件到 Java(struts2)端示例
- POJ3678 Katu Puzzle(2-sat tanjar判矛盾)
- Tomcat未启动成功,显示No Spring WebApplicationInitializer types detected on classpath
- 349_LeetCode_349 Intersection of Two Arrays 题解
- web页面渲染
- java程序员面试宝典1
- CF272C Dima and Staircase(线段树/贪心)
- 学习资源推荐(不定期更新)
- 3494. 【NOIP2013模拟联考13】线段(segment) (2017.9B组)