通过web api将大图像发布到数据库

时间:2018-05-24 18:06:50

标签: c# asp.net-mvc

我试图将3036x4048照片保存到SQL数据库。我已经使用Javascript将它转换为base64字符串,但每当我尝试将其发布到我的web api时,对象显示为null。我可以毫无问题地保存较小的照片,所以我知道web api有效。根据我的研究,byte []可以存储的最大长度是2,146,435,071。我尝试发布的图片长度为9,218,020。我还查看了图像大小,大约6 MB。我还手动将此图像插入数据库,它接受它就好了。那么为什么我的网络API不能处理更大的图像呢?图像大小(6 MB)是否太大?

这里有一些代码。不确定它是否有帮助。

public class TicketPhoto
{
    public int PhotoID { get; set; }
    public byte[] Photo { get; set; }
    public string Description { get; set; }
}

 public static TicketPhoto SaveTicketPhoto(TicketPhoto tcktPhoto)
    {
        TicketPhoto ticketPhoto = new TicketPhoto();

        string connectionString = System.Configuration.ConfigurationManager.ConnectionStrings["DefaultConnection"].ConnectionString;

        using (SqlConnection connection = new SqlConnection(connectionString))
        {
            connection.Open();
            DataTable ticketPhotoTable = new DataTable();
            ticketPhotoTable.Columns.Add("PHOTO_ID", typeof(int));
            ticketPhotoTable.Columns.Add("PHOTO", typeof(byte[]));
            ticketPhotoTable.Columns.Add("DESCRIPTION", typeof(string));

            ticketPhotoTable.Rows.Add(
                                        tcktPhoto.PhotoID,
                                        tcktPhoto.Photo,
                                        tcktPhoto.PhotoData,
                                      );

            using (connection)
            {
                SqlCommand cmd = new SqlCommand("dbo.spSMSaveTicketPhoto", connection);
                cmd.CommandType = CommandType.StoredProcedure;
                SqlParameter tblParam = cmd.Parameters.AddWithValue("@tblTicketPhoto", ticketPhotoTable);
                tblParam.SqlDbType = SqlDbType.Structured;

                cmd.ExecuteReader();
                cmd.Dispose();
            }
        }
        return ticketPhoto;
    }

1 个答案:

答案 0 :(得分:2)

您仍然需要明确地在maxRequestLength中设置web.configdefault为4MB。

E.g。 51200表示50MB。

<?xml version="1.0"?>
<configuration>
  ...
  <system.web>
    <httpRuntime executionTimeout="240" maxRequestLength="51200" />
  </system.web>
  ...
</configuration>