我正在尝试使用Angular Js和WEB API浏览并上传文件从客户端到服务器。我使用输入文件类型供用户选择文件并将文件发布到WEB API。在Web API中,我收到以下错误"在调用HttpRequest.GetBufferlessInputStream之后,不支持此方法或属性。"
我使用以下代码: -
public IHttpActionResult UploadForm()
{
HttpResponseMessage response = new HttpResponseMessage();
var httpRequest = System.Web.HttpContext.Current.Request;
if (httpRequest.Files.Count > 0)
{
foreach (string file in httpRequest.Files)
{
var postedFile = httpRequest.Files[file];
var filePath = System.Web.HttpContext.Current.Server.MapPath("~/UploadFile/" + postedFile.FileName);
postedFile.SaveAs(filePath);
}
}
return Json("Document Saved");
}
当我尝试从HTTP请求中获取文件时出现此错误...我应该更新web配置中的任何内容吗?
请帮我解决这个问题..
答案 0 :(得分:0)
试试这个对我来说很好。
//get the root folder where file will be store
string root = HttpContext.Current.Server.MapPath("~/UploadFile");
// Read the form data.
var provider = new MultipartFormDataStreamProvider(root);
await Request.Content.ReadAsMultipartAsync(provider);
if (provider.FileData.Count > 0 && provider.FileData[0] != null)
{
MultipartFileData file = provider.FileData[0];
//clean the file name
var fileWithoutQuote = file.Headers.ContentDisposition.FileName.Substring(1, file.Headers.ContentDisposition.FileName.Length - 2);
//get current file directory on the server
var directory = Path.GetDirectoryName(file.LocalFileName);
if (directory != null)
{
//generate new random file name (not mandatory)
var randomFileName = Path.Combine(directory, Path.GetRandomFileName());
var fileExtension = Path.GetExtension(fileWithoutQuote);
var newfilename = Path.ChangeExtension(randomFileName, fileExtension);
//Move file to rename existing upload file name with new random filr name
File.Move(file.LocalFileName, newfilename);
}
}
答案 1 :(得分:0)
我也有同样的问题。 @Jean的解决方案对我不起作用。
我需要上传一些CSV文件,并且必须在控制器中使用它。
在Javascript中,我使用Fetch API上传了csv文件。
但是,在控制器中,我使用了以下代码:
[HttpPost]
[CatchException]
public bool ImportBundlesFromCsv()
{
var a = Request.Content.ReadAsByteArrayAsync();
//convert to Stream if needed
Stream stream = new MemoryStream(a.Result); // a.Result is byte[]
// convert to String if needed
string result = System.Text.Encoding.UTF8.GetString(a.Result);
// your code
return true;
}
这对我有用。希望这会有所帮助!