有没有人知道如何使用HttpClient
.Net 4.5 multipart/form-data
上传?
我在互联网上找不到任何例子.
如何通过ASP.NET Web API上传图像文件?
我在文件模式下有一个输入标签,它发布到API,我如何将其保存到服务器文件夹?
我试过这段代码,但它不起作用:
private void UploadWholeFile(HttpRequestBase request)
{
for (int i = 0; i < request.Files.Count; i++)
{
var file = request.Files[i];
var ext = new FileInfo(file.FileName).Extension;
var fullPath = Path.Combine(StorageRoot, Path.GetFileName(Guid.NewGuid() + ext));
file.SaveAs(fullPath);
}
}
Run Code Online (Sandbox Code Playgroud) 如何在C#中使用JIRA REST API和HttpWebRequest将附件发布到JIRA?
从/ rest/api/2/issue/{issueIdOrKey}/attachments下的文档:
POST
为问题添加一个或多个附件.
此资源需要一个多部分帖子.媒体类型的multipart/form-data在RFC 1867中定义.大多数客户端库都有类,使得处理多部分帖子变得简单.例如,在Java中,Apache HTTP Components库提供了一个MultiPartEntity,使得提交多部分POST变得简单.
为了防止XSRF攻击,因为此方法接受multipart/form-data,所以它具有XSRF保护.这意味着您必须提交X-Atlassian-Token标头:nocheck请求,否则将被阻止.
包含附件的multipart/form-data参数的名称必须是"file"
上传名为"myfile.txt"的文件以发布REST-123的简单示例:
curl -D- -u admin:admin -X POST -H"X-Atlassian-Token:nocheck"-F"file=@myfile.txt" http://myhost.test/rest/api/2/issue/TEST -123 /附件
我有
foreach (JIRAAttachments attachm in attachments.attachments)
{
request = HttpWebRequest.Create(
logInformation.GetUri() + "/rest/api/2/issue/" + key + "/attachments"
) as HttpWebRequest;
request.Headers.Add("Authorization: Basic " + logInformation.GetEncodeAuthentication());
request.Method = "POST";
request.ContentType = "multipart/form-data";
request.Headers.Add("X-Atlassian-Token: nocheck file=@" + Path.GetFullPath(@"..\Attachments\" + attachm.filename));
request.KeepAlive = true;
request.Proxy = wp;
response = (HttpWebResponse)request.GetResponse();
Stream s = response.GetResponseStream();
FileStream …
Run Code Online (Sandbox Code Playgroud) 我有 Web api 控制器上传控制器,它具有PostUpload
将数据存储到数据库的方法。
现在我正在尝试将文件和一些参数发布到该 web api,但所有尝试都失败了,比如通过数组列表,json 对象,我们不能将文件和参数发布到 web api?
var request = new RestRequest("Uploads", Method.POST);
request.RequestFormat = DataFormat.Json;
request.AddHeader("Content-Type", "application/json");
request.AddFile("filename", Server.MapPath("/Images/137549014628194.R6MyHlYrIfIo3BWPIytG_height640.png"), "image/png");
request.AddFile("filename", Server.MapPath("/Images/137549014628194.R6MyHlYrIfIo3BWPIytG_height640.png"), "image/png");
request.AddFile("filename", Server.MapPath("/Images/137549014628194.R6MyHlYrIfIo3BWPIytG_height640.png"), "image/png");
request.AddParameter("participantsId", 2);
request.AddParameter("taskId", 77);
request.AddParameter("EnteredAnswerOptionId", 235);
IRestResponse response = createClient().Execute(request);
Run Code Online (Sandbox Code Playgroud)
网络API方法:
[HttpPost]
public string PostUpload(int? participantsId, int? taskId, int? EnteredAnswerOptionId)
{
var file = HttpContext.Current.Request.Files.Count > 0 ?
HttpContext.Current.Request.Files[0] : null;
if (file.ContentLength > 0)
{
var fileName = Path.GetFileName(file.FileName);
var path = Path.Combine(HttpContext.Current.Server.MapPath("~/uploads"), fileName);
file.SaveAs(path);
}
return …
Run Code Online (Sandbox Code Playgroud) 我想尝试这样的POST:
HttpClient hc = new HttpClient();
byte[] bytes = ReadFile(@"my_path");
var postData = new List<KeyValuePair<string, string>>();
postData.Add(new KeyValuePair<string, string>("FileName", "001.jpeg"));
postData.Add(new KeyValuePair<string, string>("ConvertToExtension", ".pdf"));
postData.Add(new KeyValuePair<string, string>("Content", Convert.ToBase64String(bytes)));
HttpContent content = new FormUrlEncodedContent(postData);
hc.PostAsync("url", content).ContinueWith((postTask) => {
postTask.Result.EnsureSuccessStatusCode();
});
Run Code Online (Sandbox Code Playgroud)
但我收到这个例外:
无效的URI:Uri字符串太长.
抱怨这条线:HttpContent content = new FormUrlEncodedContent(postData);
.对于小文件它可以工作,但我不明白为什么对于较大的文件它不?
当我发布POST时,内容可能会更大......那么为什么它会抱怨URI?