Bye Bye Moore

PoCソルジャーな零細事業主が作業メモを残すブログ

ASP.NET MVC5でFileアップロード機能をつくる

ASP.NET MVC5でFileアップロード機能をつくる場合、

実際のところ

Viewのところは、一般的なtype="file"で大丈夫です。

@using (Html.BeginForm("Action", "Controller", FormMethod.Post, new 
                                       { enctype = "multipart/form-data" }))
{
  <!-- ... --!>
    <label for="ImageUpload">Filename:</label>
    <input type="file" name="ImageUpload" id="ImageUpload" />
  <!-- ... --!>
}

該当ViewModelの方で

public class ViewModel
{
    public string ImagePath{ get; set; }
}

で、controllerの方で

// ...
using System.Web; // Server.MapPath()のために必要

// ....


public class UploadController : BaseController
    {
        public ActionResult UploadDocument()
        {
            return View();
        }


[HttpPost]
public ActionResult Action(ViewModel model)
{
    if (ModelState.IsValid)
    {

        var file = Request.Files["ImageUpload"];
        if (file != null && file.ContentLength > 0){
            var uploadDir = "~/uploads"
            var imagePath = Path.Combine(Server.MapPath(uploadDir), file.FileName);
            var imageUrl = Path.Combine(uploadDir, file.FileName);
            file.SaveAs(imagePath);
            model.ImagePath= imageUrl;
        }

    }
}

    }

Fusion360で他ファイルのモデルをリンクさせる

Fusion360で他ファイルのモデルをリンクさせる方法です

こんな画面に一個ついかしてみます
f:id:shuzo_kino:20171106234605p:plain

「現在のデザインに挿入」
f:id:shuzo_kino:20171106234622p:plain

モデルがインポートされるので、角度やら位置を調整します
f:id:shuzo_kino:20171106234629p:plain

元ファイルを更新すると、その旨警告してくれます。
同期すれば、形状が変化。
複数読んでいるなら、まとめて更新されます。

Fusion360で既製部品をインポートしてみる

なんだか導入モデル3DCADツールっぽい感があるFusion360ですが……
なんと既製品のCADデータをインポートする超絶機能がついてます。

実際のところ

「挿入」=>「製造元部品を挿入」
f:id:shuzo_kino:20171105000853p:plain
こんなページがでます
パーツを選ぶ項目
f:id:shuzo_kino:20171105000926p:plain
検索結果が絞り込まれます
f:id:shuzo_kino:20171105001015p:plain
クリックするとメールアドレスの入力
f:id:shuzo_kino:20171105000948p:plain
会社情報の入力
f:id:shuzo_kino:20171105001404p:plain
"To Model Autodesk360"を押すと、ちゃんとポートできます
f:id:shuzo_kino:20171105001839p:plain

一応、一日50種類までって制限はあるようです

Visual Studio 2017 for mac上のNuGetでパッケージを導入

導入してないパッケージをリンク
f:id:shuzo_kino:20171104002149p:plain

/Users/shuzo_kino/Projects/closedXMLsampple/closedXMLsampple/Program.cs(7,7): Error CS0246: The type or namespace name 'ClosedXML' could not be found (are you missing a using directive or an assembly reference?) (CS0246) (closedXMLsampple)

「プロジェクト」=>「NuGetパッケージの追加」
f:id:shuzo_kino:20171104002156p:plain

バージョンがある場合は選ぶことができます
f:id:shuzo_kino:20171104002158p:plain

関連パッケージの認証
f:id:shuzo_kino:20171104002202p:plain

終われば、端っこのメッセージ欄に完了報告
f:id:shuzo_kino:20171104002205p:plain

参考もと

docs.microsoft.com

ボールナット機構について

ボールナット機構は回転運動を直進運動に変える機構の一つです。
ラクターのようなデカイ車のステアリング機構に使われていたりします。
Wikipediaから画像を引用すると、こんな感じ。
f:id:shuzo_kino:20171103234841p:plain

この玉の部分はボールチェーンでなく、一個一個独立した玉です。
ベアリングのデカイのみたいなイメージですかね。
以下の動画では、トラクターのボールナット機構をバラして説明してくれてる動画です。
youtu.be
ある程度ゆるく作って、密着はボールにやらせる感じですね。
玉は軸受の中で循環し続けるようにデザインされています。

とあるオープンソース人型ロボットでは長ネジと軸受をモロに使ってましたが、
多分こういう機構を入れないとグリースまみれで酷いことになりそうです。

Git diffでブランチ間の差分をとる その2: {{branchname}}:{{filename}}記法

shuzo-kino.hateblo.jp
の別版。
" {{branchname}}:{{filename}}"な感じでも差分をチェックできます。
公式のドキュメントを漁ってみましたが、どういうわけか見つかりません。

実際のところ

gobotのリポジトリを例にしてみます。
.travis.ymlの差分を見たい場合
remotes/origin/feature/scan-joystickとremotes/origin/devでは

$ git diff remotes/origin/feature/scan-joystick:.travis.yml remotes/origin/dev:.travis.yml 
diff --git a/.travis.yml b/.travis.yml
index 746fa91..9c7fede 100644
--- a/.travis.yml
+++ b/.travis.yml
@@ -1,11 +1,11 @@
 language: go
-sudo: false
+sudo: required
 dist: trusty
 go_import_path: gobot.io/x/gobot
 go:
    - 1.7.6
-   - 1.8.3
-   - 1.9.0
...

一方、remotes/origin/feature/scan-joystick少し古めなremotes/origin/feature/dronesmithの比較では

$ git diff remotes/origin/feature/scan-joystick:.travis.yml   remotes/origin/feature/dronesmith:.travis.yml 
diff --git a/.travis.yml b/.travis.yml
index 746fa91..efbc719 100644
--- a/.travis.yml
+++ b/.travis.yml
@@ -1,44 +1,33 @@
 language: go
-sudo: false
-dist: trusty
-go_import_path: gobot.io/x/gobot
+sudo: true
 go:
-   - 1.7.6
-   - 1.8.3
-   - 1.9.0
-   - tip
+ - 1.4
+ - 1.5

範囲外の値でdatetime2型から変換できない……とか言われたらnullが入ってるからかも

sql serverAsp.net mvcを使ったアプリでdatetime型をPOSTしようとして

"The conversion of a datetime2 data type to a datetime data type resulted in an out-of-range value.

みたいな事を言われたら、null値が入ってるのが原因です。
何らかの初期値を与えたり、nullを許容する型に設定し直したりすれば良いです