Hi rani,
Check this example. Now please take its reference and correct your code.
Database
For this example i have used table named tblFilesPath whose schema and data are defined as follows.
CREATE TABLE [dbo].[tblFilesPath]
(
Id INT IDENTITY(1,1) PRIMARY KEY NOT NULL,
Name NVARCHAR(50) NOT NULL,
Path NVARCHAR(200) NOT NULL
)
HTML
<html>
<head>
<title>Upload Download File AngularJS</title>
<style type="text/css">
body { font-family: Arial; font-size: 10pt; }
.thumb { width: 24px; height: 24px; float: none; position: relative; top: 7px; }
form .progress { line-height: 15px; }
.progress { display: inline-block; width: 100px; border: 3px groove #ccc; }
.progress > div { font-size: smaller; background-color: red; width: 0; }
table { border: 1px solid #ccc; }
table th { background-color: #F7F7F7;color: #333;font-weight: bold; }
table th, table td { padding: 5px;border-color: #ccc; }
</style>
</head>
<body>
<script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/angularjs/1.3.9/angular.min.js"></script>
<script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/danialfarid-angular-file-upload/12.2.13/ng-file-upload.min.js"></script>
<script type="text/javascript">
var app = angular.module('MyApp', ['ngFileUpload'])
app.controller('MyController', function ($scope, Upload, $http, $timeout) {
PopulateFiles();
function PopulateFiles() {
$http.post("Default.aspx/BindFiles", { headers: { 'Content-Type': 'application/json'} })
.then(function (response) {
$scope.Files = eval(response.data.d);
});
}
$scope.Download = function (path) {
var config = { responseType: 'blob' }
var httpGet = $http.get(path, config);
httpGet.then(function (response) {
if (navigator.msSaveBlob) {
navigator.msSaveBlob(new Blob([response.data], { type: 'octet/stream' }), path.split('/')[1]);
} else {
var fileDownload = document.createElement("a");
fileDownload.href = path;
fileDownload.download = path.split('/')[1];
document.body.appendChild(fileDownload);
fileDownload.click();
document.body.removeChild(fileDownload);
}
});
}
$scope.UploadFiles = function (files) {
$scope.SelectedFiles = files;
if ($scope.SelectedFiles && $scope.SelectedFiles.length) {
Upload.upload({
url: 'Handler.ashx',
data: {
files: $scope.SelectedFiles
}
}).then(function (response) {
$timeout(function () {
$scope.Result = response.data;
PopulateFiles();
});
}, function (response) {
if (response.status > 0) {
var errorMsg = response.status + ': ' + response.data;
alert(errorMsg);
}
}, function (evt) {
var element = angular.element(document.querySelector('#dvProgress'));
$scope.Progress = Math.min(100, parseInt(100.0 * evt.loaded / evt.total));
element.html('<div style="width: ' + $scope.Progress + '%">' + $scope.Progress + '%</div>');
});
}
};
});
</script>
<div ng-app="MyApp" ng-controller="MyController">
<input type="file" multiple="multiple" ngf-select="UploadFiles($files)" /><hr />
Files: <ul><li ng-repeat="file in SelectedFiles">{{file.name}}</li></ul>
<div id="dvProgress" class="progress" ng-show="Progress >= 0"></div><hr />
<table class="table table-striped table-bordered table-hover table-condensed">
<tr>
<th>Id</th>
<th>Name</th>
<th>Download</th>
</tr>
<tbody ng-repeat="m in Files">
<tr>
<td>{{m.Id}}</td>
<td>{{m.Name}}</td>
<td><input type="submit" value="Download" ng-click="Download(m.Path)" /></td>
</tr>
</tbody>
</table>
</div>
</body>
</html>
Handler
C#
<%@ WebHandler Language="C#" Class="Handler" %>
using System;
using System.Configuration;
using System.Data.SqlClient;
using System.IO;
using System.Web;
public class Handler : IHttpHandler
{
public void ProcessRequest(HttpContext context)
{
foreach (string key in context.Request.Files)
{
HttpPostedFile postedFile = context.Request.Files[key];
string folderPath = context.Server.MapPath("~/Uploads/");
if (!Directory.Exists(folderPath))
{
Directory.CreateDirectory(folderPath);
}
postedFile.SaveAs(folderPath + postedFile.FileName);
string constr = ConfigurationManager.ConnectionStrings["constr"].ConnectionString;
using (SqlConnection con = new SqlConnection(constr))
{
string query = "INSERT INTO tblFilesPath VALUES (@Name,@Path)";
using (SqlCommand cmd = new SqlCommand(query))
{
cmd.Connection = con;
cmd.Parameters.AddWithValue("@Name", postedFile.FileName);
cmd.Parameters.AddWithValue("@Path", "Uploads/" + postedFile.FileName);
con.Open();
cmd.ExecuteNonQuery();
con.Close();
}
}
}
context.Response.StatusCode = 200;
context.Response.ContentType = "text/plain";
context.Response.Write("Success");
}
public bool IsReusable
{
get
{
return false;
}
}
}
VB.Net
<%@ WebHandler Language="VB" Class="Handler" %>
Imports System
Imports System.Configuration
Imports System.Data.SqlClient
Imports System.IO
Imports System.Web
Public Class Handler : Implements IHttpHandler
Public Sub ProcessRequest(ByVal context As HttpContext) Implements IHttpHandler.ProcessRequest
For Each key As String In context.Request.Files
Dim postedFile As HttpPostedFile = context.Request.Files(key)
Dim folderPath As String = context.Server.MapPath("~/Uploads/")
If Not Directory.Exists(folderPath) Then
Directory.CreateDirectory(folderPath)
End If
postedFile.SaveAs(folderPath & postedFile.FileName)
Dim constr As String = ConfigurationManager.ConnectionStrings("constr").ConnectionString
Using con As SqlConnection = New SqlConnection(constr)
Dim query As String = "INSERT INTO tblFilesPath VALUES (@Name,@Path)"
Using cmd As SqlCommand = New SqlCommand(query)
cmd.Connection = con
cmd.Parameters.AddWithValue("@Name", postedFile.FileName)
cmd.Parameters.AddWithValue("@Path", "Uploads/" & postedFile.FileName)
con.Open()
cmd.ExecuteNonQuery()
con.Close()
End Using
End Using
Next
context.Response.StatusCode = 200
context.Response.ContentType = "text/plain"
context.Response.Write("Success")
End Sub
Public ReadOnly Property IsReusable() As Boolean Implements IHttpHandler.IsReusable
Get
Return False
End Get
End Property
End Class
Namespaces
C#
using System.Collections.Generic;
using System.Configuration;
using System.Data.SqlClient;
using System.Web.Script.Serialization;
using System.Web.Services;
VB.Net
Imports System.Collections.Generic
Imports System.Configuration
Imports System.Data.SqlClient
Imports System.Web.Script.Serialization
Imports System.Web.Services
Code
C#
[WebMethod]
public static string BindFiles()
{
return (new JavaScriptSerializer().Serialize(GetFiles()));
}
public static List<File> GetFiles()
{
List<File> files = new List<File>();
using (SqlConnection conn = new SqlConnection())
{
conn.ConnectionString = ConfigurationManager.ConnectionStrings["constr"].ConnectionString;
using (SqlCommand cmd = new SqlCommand("SELECT * FROM tblFilesPath"))
{
cmd.Connection = conn;
conn.Open();
using (SqlDataReader sdr = cmd.ExecuteReader())
{
while (sdr.Read())
{
files.Add(new File
{
Id = Convert.ToInt32(sdr["Id"]),
Name = sdr["Name"].ToString(),
Path = sdr["Path"].ToString()
});
}
}
conn.Close();
}
}
return files;
}
public class File
{
public int Id { get; set; }
public string Name { get; set; }
public string Path { get; set; }
}
VB.Net
<WebMethod()>
Public Shared Function BindFiles() As String
Return (New JavaScriptSerializer().Serialize(GetFiles()))
End Function
Public Shared Function GetFiles() As List(Of File)
Dim files As List(Of File) = New List(Of File)()
Using conn As SqlConnection = New SqlConnection()
conn.ConnectionString = ConfigurationManager.ConnectionStrings("constr").ConnectionString
Using cmd As SqlCommand = New SqlCommand("SELECT * FROM tblFilesPath")
cmd.Connection = conn
conn.Open()
Using sdr As SqlDataReader = cmd.ExecuteReader()
While sdr.Read()
files.Add(New File With {
.Id = Convert.ToInt32(sdr("Id")),
.Name = sdr("Name").ToString(),
.Path = sdr("Path").ToString()
})
End While
End Using
conn.Close()
End Using
End Using
Return files
End Function
Public Class File
Public Property Id As Integer
Public Property Name As String
Public Property Path As String
End Class
Screenshot