C#端代碼:來自網絡,驗證可用
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
try
{
var javaurl = "http://localhost:8083/xx_manager_war_exploded/api/project/upload?token=xxxxxxx";
var filepath = "F:\\新建文本文檔.txt";//文件路徑
var filename = filepath.Substring(filepath.LastIndexOf("\\") + 1);//文件名稱
//var javaurl = string.Format("http://{0}:8081/file/uploadVoice", AndroidIP);
var httpUpload = new HttpUpload();
var path1 = filepath;
var formDatas = new List<FormItemModel>();
//添加文件
formDatas.Add(new FormItemModel()
{
Key = "file",
Value = "",
FileName = filename,
FileContent = File.OpenRead(path1)
});
formDatas.Add(new FormItemModel()
{
Key = "file1",
Value = "",
FileName = filename,
FileContent = File.OpenRead(path1)
});
//添加其他字段
formDatas.Add(new FormItemModel()
{
Key = "projectId",
Value = "8a80813d725f426a01725f4956a90096"
});
formDatas.Add(new FormItemModel()
{
Key = "dir",
Value = "abc\\xyz\\qq"
});
//提交表單
var result = httpUpload.PostForm(javaurl, formDatas);
if (result == "1")
{
MessageBox.Show("發送成功");
}
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
}
}
}
public class HttpUpload
{
/// <summary>
/// 使用Post方法獲取字符串結果
/// </summary>
/// <param name="url"></param>
/// <param name="formItems">Post表單內容</param>
/// <param name="cookieContainer"></param>
/// <param name="timeOut">默認20秒</param>
/// <param name="encoding">響應內容的編碼類型(默認utf-8)</param>
/// <returns></returns>
public string PostForm(string url, List<FormItemModel> formItems, CookieContainer cookieContainer = null, string refererUrl = null, Encoding encoding = null, int timeOut = 20000)
{
string retString = string.Empty;
try
{
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);
#region 初始化請求對象
request.Method = "POST";
request.Timeout = timeOut;
request.Accept = "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8";
request.KeepAlive = true;
request.UserAgent = "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/31.0.1650.57 Safari/537.36";
request.UseDefaultCredentials = true;
if (!string.IsNullOrEmpty(refererUrl))
request.Referer = refererUrl;
if (cookieContainer != null)
request.CookieContainer = cookieContainer;
#endregion
string boundary = "----" + DateTime.Now.Ticks.ToString("x");//分隔符
request.ContentType = string.Format("multipart/form-data; boundary={0}", boundary);
//請求流
var postStream = new MemoryStream();
#region 處理Form表單請求內容
//是否用Form上傳文件
var formUploadFile = formItems != null && formItems.Count > 0;
if (formUploadFile)
{
//文件數據模板
string fileFormdataTemplate =
"\r\n--" + boundary +
"\r\nContent-Disposition: form-data; name=\"{0}\"; filename=\"{1}\"" +
"\r\nContent-Type: text/plain" +
"\r\n\r\n";
//文本數據模板
string dataFormdataTemplate =
"\r\n--" + boundary +
"\r\nContent-Disposition: form-data; name=\"{0}\"" +
"\r\n\r\n{1}";
foreach (var item in formItems)
{
string formdata = null;
if (item.IsFile)
{
//上傳文件
formdata = string.Format(
fileFormdataTemplate,
item.Key, //表單鍵
item.FileName);
}
else
{
//上傳文本
formdata = string.Format(
dataFormdataTemplate,
item.Key,
item.Value);
}
//統一處理
byte[] formdataBytes = null;
//第一行不需要換行
if (postStream.Length == 0)
formdataBytes = Encoding.UTF8.GetBytes(formdata.Substring(2, formdata.Length - 2));
else
formdataBytes = Encoding.UTF8.GetBytes(formdata);
postStream.Write(formdataBytes, 0, formdataBytes.Length);
//寫入文件內容
if (item.FileContent != null && item.FileContent.Length > 0)
{
using (var stream = item.FileContent)
{
byte[] buffer = new byte[1024];
int bytesRead = 0;
while ((bytesRead = stream.Read(buffer, 0, buffer.Length)) != 0)
{
postStream.Write(buffer, 0, bytesRead);
}
}
}
}
//結尾
var footer = Encoding.UTF8.GetBytes("\r\n--" + boundary + "--\r\n");
postStream.Write(footer, 0, footer.Length);
}
else
{
request.ContentType = "application/x-www-form-urlencoded";
}
#endregion
request.ContentLength = postStream.Length;
#region 輸入二進制流
if (postStream != null)
{
postStream.Position = 0;
//直接寫入流
Stream requestStream = request.GetRequestStream();
byte[] buffer = new byte[1024];
int bytesRead = 0;
while ((bytesRead = postStream.Read(buffer, 0, buffer.Length)) != 0)
{
requestStream.Write(buffer, 0, bytesRead);
}
////debug
//postStream.Seek(0, SeekOrigin.Begin);
//StreamReader sr = new StreamReader(postStream);
//var postStr = sr.ReadToEnd();
postStream.Close();//關閉文件訪問
}
#endregion
HttpWebResponse response = (HttpWebResponse)request.GetResponse();
if (cookieContainer != null)
{
response.Cookies = cookieContainer.GetCookies(response.ResponseUri);
}
using (Stream responseStream = response.GetResponseStream())
{
using (StreamReader myStreamReader = new StreamReader(responseStream, encoding ?? Encoding.UTF8))
{
retString = myStreamReader.ReadToEnd();
}
}
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
//Log.e(typeof(HttpUpload), ex.Message);
}
return retString;
}
}
/// <summary>
/// 表單數據項
/// </summary>
public class FormItemModel
{
/// <summary>
/// 表單鍵,request["key"]
/// </summary>
public string Key { set; get; }
/// <summary>
/// 表單值,上傳文件時忽略,request["key"].value
/// </summary>
public string Value { set; get; }
/// <summary>
/// 是否是文件
/// </summary>
public bool IsFile
{
get
{
if (FileContent == null || FileContent.Length == 0)
return false;
if (FileContent != null && FileContent.Length > 0 && string.IsNullOrWhiteSpace(FileName))
throw new Exception("上傳文件時 FileName 屬性值不能爲空");
return true;
}
}
/// <summary>
/// 上傳的文件名
/// </summary>
public string FileName { set; get; }
/// <summary>
/// 上傳的文件內容
/// </summary>
public Stream FileContent { set; get; }
}
java端接收:
@Controller
@RequestMapping(value = "/api/project", name = "項目管理")
public class ApiProjectController {
@Resource
private ProjectService service;
@Resource
private ApiProjectService apiProjectService;
@RequestMapping(value = "/upload", name = "上傳")
@ResponseBody
public Object upload(ReqModule reqModule) {
apiProjectService.upload(reqModule);
return new Result(true);
}
}
@Data
public class ReqModule {
private String projectId;
private String module;
private String dir;
private MultipartFile file;
private MultipartFile file1;
}