Reputation: 8682
I have written a fileupload control in asp.net mvc.But as of now the logic what i am doing is, i am downloading excel file in to server locally and then processing data and pushing in to oracle database.But some servers due to permission issues , i am not able to retrieve data from downloaded server or download in to server in either way. I would like to have a logic which will convert the uploading files in to a stream or what ever rather downloading in to server locally .I dont know whether i can implement HttpPostedFileBase.inputstream
if so how can i implement it here?
VIEW
@using (Html.BeginForm("Upload", "mnis", FormMethod.Post, new { enctype = "multipart/form-data" }))
{
@*<div>
<label for="file">Filename:</label></div>
<div class="uploadfirst">
<input type="file" name="file" id="file" /></div>
@Html.Label("lbl", "PSITE_SLNO");
<input id="Text1" name="txtsln" type="text" />
<div class="upload">
<input value="Submit" type="submit" /></div>*@
<table>
<tr><td><label for="file">Filename:</label></td><td><input type="file" name="file" id="file" /></td></tr>
<tr><td></td><td class="positions"><input value="Submit" type="submit" /></td></tr>
</table>
}
CONTROLLER
[HttpPost]
public ActionResult Upload(HttpPostedFileBase file)
{
try
{
if (file.ContentLength > 0)
{
int slno = (int)(Session["slnum"]);
string st = file.FileName.ToString();
//st = Server.MapPath("~/")+st;
st = Path.Combine(Server.MapPath("~/"), st);
file.SaveAs(st);
//Start(st, slno);
Task.Factory.StartNew(() =>
{
Thread.CurrentThread.Name = "Maximo thread";
Start(st, slno);
});
var fileName = Path.GetFileName(file.FileName);
var path = Path.Combine(Server.MapPath("~/App_Data/uploads"), fileName);
RedirectToAction("Index");
// file.SaveAs(path);
}
}
Upvotes: 0
Views: 763
Reputation: 10295
try this:
You can Get Stream From InputStream
of Fileuplpad Control then you can convert Stream to byte Array for saving into database
Stream stream = file.PostedFile.InputStream;
byte[] byteArray = ReadFully(stream);
public static byte[] ReadFully(Stream input)
{
byte[] buffer = new byte[input.Length];
using (MemoryStream ms = new MemoryStream())
{
int read;
while ((read = input.Read(buffer, 0, buffer.Length)) > 0)
{
ms.Write(buffer, 0, read);
}
return ms.ToArray();
}
}
Upvotes: 1