Skip to content

Commit 1197bf1

Browse files
jtothebellmaxpavlov
authored andcommitted
Adding support for IE and Opera with the help of i-e-b's ASP.net jQuery Uploader project
1 parent ad4310b commit 1197bf1

File tree

3 files changed

+74
-18
lines changed

3 files changed

+74
-18
lines changed
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
2+
<map />

jQuery-File-Upload.MVC3/Controllers/HomeController.cs

+71-17
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,11 @@ namespace jQuery_File_Upload.MVC3.Controllers
99
{
1010
public class HomeController : Controller
1111
{
12+
private string StorageRoot
13+
{
14+
get { return Path.Combine(Server.MapPath("~/Files")); }
15+
}
16+
1217
public ActionResult Index()
1318
{
1419
return View();
@@ -52,26 +57,22 @@ public ActionResult UploadFiles()
5257

5358
foreach (string file in Request.Files)
5459
{
55-
var hpf = Request.Files[file] as HttpPostedFileBase;
56-
if (hpf.ContentLength == 0 || hpf.FileName == null)
57-
continue;
58-
59-
var filename = Guid.NewGuid() + Path.GetFileName(hpf.FileName);
60+
var statuses = new List<ViewDataUploadFilesResult>();
61+
var headers = Request.Headers;
6062

61-
var filepath = Path.Combine(Server.MapPath("~/Files"), filename);
62-
hpf.SaveAs(filepath);
63-
64-
r.Add(new ViewDataUploadFilesResult()
63+
if (string.IsNullOrEmpty(headers["X-File-Name"]))
6564
{
66-
name = hpf.FileName,
67-
size = hpf.ContentLength,
68-
type = hpf.ContentType,
69-
url = "/Home/Download/" + filename,
70-
delete_url = "/Home/Delete/" + filename,
71-
delete_type = "GET",
72-
thumbnail_url = @"data:image/png;base64," + EncodeFile(filepath)
65+
UploadWholeFile(Request, statuses);
66+
}
67+
else
68+
{
69+
UploadPartialFile(headers["X-File-Name"], Request, statuses);
70+
}
7371

74-
});
72+
JsonResult result = Json(statuses);
73+
result.ContentType = "text/plain";
74+
75+
return result;
7576
}
7677

7778
return Json(r);
@@ -81,6 +82,59 @@ private string EncodeFile(string fileName)
8182
{
8283
return Convert.ToBase64String(System.IO.File.ReadAllBytes(fileName));
8384
}
85+
86+
//Credit to i-e-b and his ASP.Net uploader for the bulk of the upload helper methods - https://github.com/i-e-b/jQueryFileUpload.Net
87+
private void UploadPartialFile(string fileName, HttpRequestBase request, List<ViewDataUploadFilesResult> statuses)
88+
{
89+
if (request.Files.Count != 1) throw new HttpRequestValidationException("Attempt to upload chunked file containing more than one fragment per request");
90+
var file = request.Files[0];
91+
var inputStream = file.InputStream;
92+
var fullName = Path.Combine(StorageRoot, Path.GetFileName(fileName));
93+
94+
using (var fs = new FileStream(fullName, FileMode.Append, FileAccess.Write))
95+
{
96+
var buffer = new byte[1024];
97+
98+
var l = inputStream.Read(buffer, 0, 1024);
99+
while (l > 0)
100+
{
101+
fs.Write(buffer, 0, l);
102+
l = inputStream.Read(buffer, 0, 1024);
103+
}
104+
fs.Flush();
105+
fs.Close();
106+
}
107+
statuses.Add(new ViewDataUploadFilesResult()
108+
{
109+
name = fileName,
110+
size = file.ContentLength,
111+
type = file.ContentType,
112+
url = "/Home/Download/" + fileName,
113+
delete_url = "/Home/Delete/" + fileName,
114+
delete_type = "GET",
115+
});
116+
}
117+
118+
//Credit to i-e-b and his ASP.Net uploader for the bulk of the upload helper methods - https://github.com/i-e-b/jQueryFileUpload.Net
119+
private void UploadWholeFile(HttpRequestBase request, List<ViewDataUploadFilesResult> statuses)
120+
{
121+
for (int i = 0; i < request.Files.Count; i++)
122+
{
123+
var file = request.Files[i];
124+
file.SaveAs(Path.Combine(StorageRoot, Path.GetFileName(file.FileName)));
125+
126+
string fullName = Path.GetFileName(file.FileName);
127+
statuses.Add(new ViewDataUploadFilesResult()
128+
{
129+
name = file.FileName,
130+
size = file.ContentLength,
131+
type = file.ContentType,
132+
url = "/Home/Download/" + file.FileName,
133+
delete_url = "/Home/Delete/" + file.FileName,
134+
delete_type = "GET",
135+
});
136+
}
137+
}
84138
}
85139

86140
public class ViewDataUploadFilesResult

jQuery-File-Upload.MVC3/jQuery-File-Upload.MVC3.csproj

+1-1
Original file line numberDiff line numberDiff line change
@@ -180,7 +180,7 @@
180180
<WebProjectProperties>
181181
<UseIIS>False</UseIIS>
182182
<AutoAssignPort>True</AutoAssignPort>
183-
<DevelopmentServerPort>49319</DevelopmentServerPort>
183+
<DevelopmentServerPort>61396</DevelopmentServerPort>
184184
<DevelopmentServerVPath>/</DevelopmentServerVPath>
185185
<IISUrl>
186186
</IISUrl>

0 commit comments

Comments
 (0)