我正在尝试使用asp.net web api实现文件上传系统,我遇到了问题.我试图将多部分表单数据放入内存流中,以便根据服务层实现将其写入磁盘或blob存储.问题是它适用于小文件,但我试图上传一个291 MB的文件,它正在抛出一个内存不足的例外.这是代码:
if (!Request.Content.IsMimeMultipartContent())
{
Request.CreateErrorResponse(HttpStatusCode.UnsupportedMediaType, "Request must be multipart.");
}
var provider = new MultipartMemoryStreamProvider();
try
{
await Request.Content.ReadAsMultipartAsync(provider);
var infoPart = provider.Contents.Where(x => x.Headers.ContentDisposition.Name.Replace("\"", string.Empty) == "fileInfo").SingleOrDefault();
var filePart = provider.Contents.Where(x => x.Headers.ContentDisposition.Name.Replace("\"", string.Empty) == "filePart" && x.Headers.ContentDisposition.FileName != null).Single();
byte[] file = null;
using (Stream stream = filePart.ReadAsStreamAsync().Result)
{
using (MemoryStream memory = new MemoryStream())
{
stream.CopyTo(memory);
file = memory.ToArray();
}
}
string fileContentType = filePart.Headers.ContentType.MediaType;
FileDto result = _fileService.AddFileToResource(Variables);
string uri = Url.Link("DefaultGet", new …Run Code Online (Sandbox Code Playgroud) 我有一个名为“LogBookSystemUsers”的表,我想在 EF Core 5 中设置多对多的功能。我几乎可以正常工作,但问题是我的 ID 列已命名SystemUserId,LogBookId但是当 EF 进行连接时,它会尝试使用SystemUserID和LogBookID。这是我当前的配置代码:
modelBuilder.Entity<SystemUser>()
.HasMany(x => x.LogBooks)
.WithMany(x => x.SystemUsers)
.UsingEntity(x =>
{
x.ToTable("LogBookSystemUsers", "LogBooks");
});
Run Code Online (Sandbox Code Playgroud)
我试过这个:
modelBuilder.Entity<SystemUser>()
.HasMany(x => x.LogBooks)
.WithMany(x => x.SystemUsers)
.UsingEntity<Dictionary<string, object>>("LogBookSystemUsers",
x => x.HasOne<LogBook>().WithMany().HasForeignKey("LogBookId"),
x => x.HasOne<SystemUser>().WithMany().HasForeignKey("SystemUserId"),
x => x.ToTable("LogBookSystemUsers", "LogBooks"));
Run Code Online (Sandbox Code Playgroud)
但这只是添加了两个新列,而不是设置当前列的名称。
这是所有数据库第一。我不想为多对多表使用一个类,因为我在我的项目中一直这样做,我不希望一堆无用的类四处飘散。有任何想法吗?
我在DateTimeOffset使用实体框架从 PostgreSQL 数据库检索 a 时遇到问题。就研究问题而言,我发现这篇文章可以帮助我了解问题所在,但我无法弄清楚如何解决它。
我有一个允许用户上传文件(主要是图像)的 API,它提取图像的拍摄日期并将其存储在数据库中。它在大多数情况下都很好用。但是,如果日期在 2007 年之前的 3 月 11 日到 4 月的某个时间(日期因年份而异),它会很好地保存到数据库中,但是在尝试检索该行时,它会抛出错误:
本地 dateTime 参数的 UTC 偏移量与偏移参数不匹配。
我Timestamp With Time Zone在 postgreSQL 中使用该CameraDate字段的类型。我不知道如何让它正常工作。如果有一种方法可以在不更改数据库的情况下做到这一点,那将是可取的。
例子:
2001-04-01 10:47:17-06 Works
2001-03-01 10:47:17-06 Works
2001-03-13 10:47:17-06 Doesn't work
2007-03-13 10:47:17-06 Works
Run Code Online (Sandbox Code Playgroud)
这是我的代码:
Context.Files.Add(file);
Context.Entry(file).Reload();
Run Code Online (Sandbox Code Playgroud)
文件类如下所示(为简洁起见,删除了一些字段):
public class File
{
[Column("FileId")]
public override Guid ID { get; set; }
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public int DisplayId { get; set; }
public DateTimeOffset? CameraDate { get; set; } …Run Code Online (Sandbox Code Playgroud) 我有一个串行字段(称为 displayID),它不是 postgresql 数据库中表的键,我首先使用实体框架代码。当我通过上下文将新对象添加到数据库中时,我会保存该对象,但它会以 0 而不是下一个整数的值插入数据库。我无法让它自动增加数据库中的值。我正在使用 devArt postgres 实体框架驱动程序。有什么特别的事我必须做吗?
我正在尝试在我的网站上实现无限滚动,它在任何计算机上的浏览器上运行良好,但在移动浏览器上有问题。到目前为止,在 Chrome 上,如果我不放大或缩小,它可以正常工作,但一旦我以任何方式缩放,它就会停止工作。在 safari 上它根本不起作用。这是我正在使用的代码:
$(window).on('scroll', function (e) {
console.log(" window.scrollTop = " + $(window).scrollTop() + " document.height=" + $(document).height() + " window.height =" + $(window).height());
if ($(window).scrollTop() == $(document).height() - $(window).height()) {
load();
}
});
Run Code Online (Sandbox Code Playgroud)
如果有人有任何建议,请告诉我。
我正在编写一个API,允许用户上传文件(图像,视频等).我使用SHA-1哈希来确保多次上传相同的文件.以前我们只允许较小的文件,所以我将它们读入字节数组并进行散列,但现在我们允许更大的文件,所以我使用的是文件流.问题是SHA-1算法返回不同的哈希值.我需要弄清楚如何获得相同的哈希,无论方法如何,即使我必须将字节数组转换为文件流或其他东西.但是,我尝试将字节数组写入临时文件并读入它,并返回与字节数组相同的哈希值.这是一个示例控制台应用程序,显示我正在做什么:
static void Main(string[] args)
{
string file = "C:\\CUWCDFileStorage\\temp\\test.png";
var bytes = File.ReadAllBytes(file);
using (var stream = File.Open(file, FileMode.Open))
{
Console.WriteLine(Sha1HashFile(bytes)); // Returns B7F6D90C30233F91FCEFE05FB49679F8B26C9D80
Console.WriteLine(Sha1HashFile(stream)); // Returns DA39A3EE5E6B4B0D3255BFEF95601890AFD80709
Console.WriteLine(Sha1HashFile2(bytes)); // Returns B7F6D90C30233F91FCEFE05FB49679F8B26C9D80
}
Console.Read();
}
public static string Sha1HashFile(byte[] file)
{
using (SHA1Managed sha1 = new SHA1Managed())
{
return BitConverter.ToString(sha1.ComputeHash(file)).Replace("-", "");
}
}
public static string Sha1HashFile(Stream stream)
{
using (SHA1Managed sha1 = new SHA1Managed())
{
return BitConverter.ToString(sha1.ComputeHash(stream)).Replace("-", "");
}
}
public static string Sha1HashFile2(byte[] bytes)
{
string file …Run Code Online (Sandbox Code Playgroud)