小编Dmi*_*pka的帖子

如何检查文件是否是有效图像?

我正在构建一个Web应用程序.

在其中一个页面上有一个上传表单,用户可以在其中上传文件.上传完成后,我想检查服务器上传的文件是否为图像.

除了简单的文件扩展名检查(即不假设*.png文件名实际上是PNG图像),是否可以检查这一点?

例如,如果我编辑JPEG图像在随机位置添加/编辑一个字节以生成无效的JPEG文件,我想要检测它不再是JPEG图像.我曾经使用GD库通过PHP做过类似的事情.

我想知道Go是否可以做到?

mime go

14
推荐指数
3
解决办法
9106
查看次数

有趣的行为:对象文字只能指定已知的属性

这里有类似的问题,我可以理解这个错误的本质:

\n\n
type Person = { name: string };\n\n// Error: Object literal may only specify known properties, and \'age\' does not exist in type \'Person\'.\nconst person: Person = { name: \'Sarah\', age: 13 };\n
Run Code Online (Sandbox Code Playgroud)\n\n

所以这失败了,因为属性不是有意义的age类型的一部分。Person

\n\n

但是,我可以毫无问题地做到这一点:

\n\n
type Person = { name: string };\n\nconst obj = { name: \'Sarah\', age: 13 };\nconst person: Person = obj;\n\nconsole.log(person); // { name: \'Sarah\', age: 13 }\n
Run Code Online (Sandbox Code Playgroud)\n\n

为什么第一个失败而第二个没有 - 这两个示例不应该都失败或都通过吗?

\n\n

对我来说,这两个代码片段是相同的。不是吗?

\n\n

更新:

\n\n

以下是Typescript Handbook …

typescript

10
推荐指数
1
解决办法
2万
查看次数

如何使用工厂构造函数扩展抽象类?

情况如下:

abstract class A {
  void doSomething() => print('Do something..');
}

class B implements A {
  @override
  void doSomething() => print('Do something already..');
}

class C extends A {
}
Run Code Online (Sandbox Code Playgroud)

我有一个抽象类A.B类实现A.因此它覆盖了doSomething()方法.C类延伸A.

一切正常,直到我将工厂构造函数添加到A类:

abstract class A {
  factory A() => new B();

  void doSomething() => print('Do something..');
}
Run Code Online (Sandbox Code Playgroud)

这导致我的IDE(IntelliJ IDEA)出错:

预期的生成构造函数,但工厂发现

我的第一个想法是为C类创建构造函数,我将其称为工厂构造函数.是否可以这样做?

当我尝试扩展Exception类时,我遇到了同样的问题.它还有一个工厂构造函数:

abstract class Exception {
  factory Exception([var message]) => new _ExceptionImplementation(message);
}
Run Code Online (Sandbox Code Playgroud)

这就是为什么要创建我的自定义异常我必须实现Exception类而不是扩展它,它真的让我困惑.

我还想澄清一个术语问题.我可以说从B类的角度来看,A是一个接口,所以B正在实现接口A.但是,从C类的角度来看,A是一个抽象类,所以C是扩展抽象类A.这些语句正确?

谢谢.

梅德.

abstract-class interface dart

6
推荐指数
1
解决办法
1506
查看次数

如何使用 Jest 模拟远程网站对单元测试 Puppeteer 代码的响应?

我正在为一个网站实现一个网络抓取脚本,该脚本将收集一些有用的信息。

脚本是使用 Puppeteer 库实现的,基本上是一组指令,例如:

  1. 启动无头 chrome
  2. 打开新标签/页面
  3. 从 HTML 中获取一些分页链接
  4. 打开找到的每个分页链接并从 HTML 中抓取一些信息

我正在寻找某种方法来测试此功能。理想情况下,我想要做的是将真实的 HTML 响应“预保存”在测试文件夹中,然后模拟外部网站响应(确保它们始终相同)。然后断言收集到的信息是正确的。

我熟悉几种能够模拟fetch浏览器中功能端点的工具。我正在寻找类似的东西,但对于Puppeteer.

到目前为止,我正在考虑的唯一解决方案是使用browser实例作为我的脚本的依赖项。然后模拟newPage浏览器的方法返回带有自定义拦截器的页面。但这看起来工作量很大。

对此还有其他解决方案吗?

unit-testing jestjs puppeteer

6
推荐指数
1
解决办法
3280
查看次数

为什么IntelliJ IDEA不能在Go项目中导入本地包?

我正在使用Idea插件来Go来处理我的项目.我的项目结构如下:

在此输入图像描述

控制器,实体,模型,存储库等 - 是本地包(可以使用另一个).

不幸的是,Idea无法从另一个本地包导入:

在此输入图像描述

在此输入图像描述

有了远程包,一切都很好.

我的项目设置:

在此输入图像描述

在此输入图像描述

我究竟做错了什么?

plugins intellij-idea package go

5
推荐指数
2
解决办法
5350
查看次数

Dart中有关类成员封装和类型注释的约定是什么?

我是Dart语言的新手.所以我想更多地了解程序员在使用这种语言进行开发时遵循的一些约定.

  1. 我应该像我一样封装我的类成员,例如在Java中吗?每当我创建类的属性时,我应该将其设为私有并提供getter/setter吗?或者有些情况我应该公开他们?如果是这样,这些情况的例子是什么?

  2. 在我看来,键入注释,如String,int等,增加了代码的可读性.它们作为正在阅读/使用我的代码的其他开发人员的文档.程序员现在不应该考虑在这个变量中存储什么类型的值.那么,在声明变量时需要使用var关键字的情况又是什么?

梅德.

谢谢.

dart

5
推荐指数
1
解决办法
637
查看次数

是否可以对类的静态属性进行非延迟初始化?

我想要实现的目标的一个简短示例:

class Country {
  final int id;
  final String name;

  static List<Country> values = new List<Country>();

  static final Country US = new Country._create(1, 'United States');
  static final Country UK = new Country._create(2, 'United Kingdom');

  Country._create(this.id, this.name) {
    values.add(this);
  }
}
Run Code Online (Sandbox Code Playgroud)

我有一个带有私有命名构造函数的 Country 类。我想创建一组静态国家/地区常量和所有可用国家/地区的列表。

这就是问题所在:

void main() {
  print('Countries:');
  for (Country country in Country.values) {
    print(country.name);
  }
}
Run Code Online (Sandbox Code Playgroud)

由于静态成员的延迟初始化,我的列表是空的。然而:

void main() {

  print('US id is: ${Country.US.id}');

  print('Countries:');
  for (Country country in Country.values) {
    print(country.name);
  }
}
Run Code Online (Sandbox Code Playgroud)

仅当我在代码中引用 US 常量时,它才会添加到列表中。 …

static lazy-initialization dart

5
推荐指数
1
解决办法
1032
查看次数

Future execution leads to unhandled exception

import 'dart:async';

void main() {
  divide(1, 0).then((result) => print('1 / 0 = $result'))
    .catchError((error) => print('Error occured during division: $error'));
}

Future<double> divide(int a, b) {
  if (b == 0) {
    throw new Exception('Division by zero');
  }
  return new Future.value(a/b);
}
Run Code Online (Sandbox Code Playgroud)

目前我正在学习如何在 Dart 中使用 future,并且我陷入了这样一个简单的例子中。当用户尝试执行除以零时,我的未来会抛出异常。但是, .catchError 不处理我的异常。我得到了未处理的异常,并带有堆栈跟踪。我很确定我错过了一些明显的东西,但无法理解到底是什么。

据我了解,还有另一种方法来处理错误:

divide(1, 0).then((result) => print('1 / 0 = $result'),
    onError: (error) => print('Error occured during division: $error'));
Run Code Online (Sandbox Code Playgroud)

使用命名可选参数 - onError。这样做仍然会导致未处理的异常。

我还想澄清一件事。我对吗?- 这两种方法之间的唯一区别是 .catchError() 还处理内部 future 抛出的错误(在外部 future 的 then() 方法内部调用的 future),而 onError …

future unhandled-exception dart

3
推荐指数
1
解决办法
2933
查看次数