使用Angularjs中的Web API将pdf文件作为varbinary(max)插入数据库?
Posted
技术标签:
【中文标题】使用Angularjs中的Web API将pdf文件作为varbinary(max)插入数据库?【英文标题】:Insert pdf file as varbinary(max) into the database using web API in Angularjs? 【发布时间】:2020-03-26 16:43:40 【问题描述】:我尝试将 pdf 文件插入数据库,但它被插入为 0 代表 int
数据类型和 null 代表 varbinary(max)
到数据库中。我还使用邮递员进行了测试,将数据传递到 Web API 控制器,但它仍然作为 0 和 null 插入到数据库中。
[HttpPost]
[ActionName("addReceiptDocument")]
public int insertReceiptDocument(receiptDocument rd)
rd = new receiptDocument();
SqlConnection myConnection = new SqlConnection();
myConnection.ConnectionString = ConfigurationManager.ConnectionStrings["ERPConnectionString"].ConnectionString;
SqlCommand sqlCmd = new SqlCommand();
//DateTime now = DateTime.Now;
sqlCmd.CommandType = CommandType.StoredProcedure;
sqlCmd.CommandText = "INSERT_RECEIPT_DOCUMENT";
sqlCmd.Connection = myConnection;
sqlCmd.Parameters.AddWithValue("@RDID", rd.RDID);
sqlCmd.Parameters.AddWithValue("@RECEIPTID", rd.RECEIPTID);
//var request = HttpContext.Current.Request;
//var filePath = "Z:\\Templates\\Images\\" + request.Headers["filename"];
//using (var fs = new System.IO.FileStream(filePath, System.IO.FileMode.Create))
//
// request.InputStream.CopyTo(fs);
//
sqlCmd.Parameters.AddWithValue("@DOCUMENT", rd.DOCUMENT);
myConnection.Open();
int rowInserted = sqlCmd.ExecuteNonQuery();
myConnection.Close();
return 1;
$scope.submit = function (files)
//var fd = new FormData();
//Take the first selected file
//fd.append("payloadFile", 33);
//fd.append("payloadFile", 98746);
//fd.append("payloadFile", files);
$http.post('http://localhost:49556/api/purchaseOrder/addReceiptDocument',
fd, headers: 'Content-Type': undefined
).then(function (response)
alert('success');
)
<form name="oForm" id="oForm">
File: <input type="file" id="payloadFile" name="payloadFile" /><br />
<input type="submit" value="Submit" ng-click="submit(files)" />
</form>
public class receiptDocument
public int RDID set; get;
public int RECEIPTID set; get;
public byte[] DOCUMENT set; get;
【问题讨论】:
这能回答你的问题吗? How to insert PictureBox to Sql Server Database Varbinary(MAX) with C#? 稍微匹配,但我想插入一个pdf文件 就像您的其他问题一样,您正在将一个空白文档插入到您的数据库中,因为您正在设置 rd = new reciptDocument.因此,清除作为参数传递给函数的任何数据。 【参考方案1】:代替
sqlCmd.Parameters.Add("@DOCUMENT", rd.DOCUMENT);
你可以写
sqlCmd.Parameters.Add("@DOCUMENT", SqlDbType.VarBinary, rd.DOCUMENT.Length).Value = rd.DOCUMENT;
还要交叉检查rd.DOCUMENT
中的值是否正确
【讨论】:
出现错误,如下所示:错误 3 方法“AddWithValue”没有重载需要 3 个参数 \api\Controllers\purchaseOrderController.cs 已更新,我猜您使用的是最新版本的 .net,此处提供文档:docs.microsoft.com/en-us/dotnet/api/… 获取空引用异常以上是关于使用Angularjs中的Web API将pdf文件作为varbinary(max)插入数据库?的主要内容,如果未能解决你的问题,请参考以下文章
我如何将web api中的标题内容返回给AngularJS $ http服务
如何从 AngularJS 站点安全地连接到 web api
chrome 中的 Angularjs 应用程序中的 CORS 错误访问 .NET Web Api