Google Code Prettify

[Javascript][MVC] Input file 選取檔案後預覽圖片

選取一個圖片檔案後,直接進行預覽


<script>
function InputLoadImageToBindImageElement(inputEl, imgEl) {
 
    if (inputEl.files && inputEl.files[0]) {
        var reader = new FileReader();
 
        reader.onload = function (e) {
            $(imgEl).attr('src', e.target.result);
        }
 
        reader.readAsDataURL(inputEl.files[0]);
    }
}
</script>




HTML

<img src="" id="image1" />
<input type="file" name="name" id="iptImage1" value="" />





呼叫


<script>
$("#iptImage1").change(function () {
          InputLoadImageToBindImageElement(this, $('#image1'));
});
</script>



注意:
本文中的 Script 都必須放在 Form 的後面,或者乾脆就放在頁面的最下方,以免找不到 Input 而報錯。






MVC 中可用下面的方法叫用


@model WebServiceTest.Models.UploadFileInfo

@{
    ViewBag.Title = "Index";
    Layout = "~/Views/Shared/_Layout.cshtml";
}

<h2>Index</h2>
<div>@ViewBag.Message</div>
@using(Html.BeginForm("Index", "FileUpload", 
       new { ReturnUrl = ViewBag.ReturnUrl }, 
       FormMethod.Post, 
       new { @class = "form-inline", role = "form", enctype = "multipart/form-data" })) {
    @Html.AntiForgeryToken()
    @Html.ValidationSummary()
    <input id="FileName" multiple="multiple" name="FileName" type="file" />
    <img id="image1" src="" />
    <input id="btnSubmit" name="btnSubmit" type="submit" value="Submit" />
}

@section  scripts{
    <script>
        $("#FileName").change(function () {
            InputLoadImageToBindImageElement(this, $('#image1'));
        });
        function InputLoadImageToBindImageElement(inputEl, imgEl) {
            if (inputEl.files && inputEl.files[0]) {
                var reader = new FileReader();
                reader.onload = function (e) {
                    $(imgEl).attr('src', e.target.result);
                }
                reader.readAsDataURL(inputEl.files[0]);
            }
        }
    </script>
}







Unit test sample code

using System.Collections.Generic;
using System.Linq;
using System.Threading;
using System.Web.Http;
using System.Web.Http.Results;

using Microsoft.VisualStudio.TestTools.UnitTesting;

using WebServiceTest.Controllers;
using WebServiceTest.Models;

namespace WebServiceTest.Tests.Controllers {
    [TestClass()]
    public class ProductsControllerTest {
        public CancellationToken _cancellationToken { get; set; }
        public ProductsControllerTest() {
            _cancellationToken = new CancellationToken();
        }
        // 取得所有產品項目明細
        [TestMethod()]
        public void GetAllProducts() {
            ProductsController controller = new ProductsController();
            IEnumerable<Product> result = controller.GetAllProducts();
            Assert.IsNotNull(result);             // 檢查有沒有資料
            Assert.AreEqual(3, result.Count());   // 檢查資料的筆數
            Assert.AreEqual("Tomato Soup", result.ElementAt(0).Name);    // 資料內容比對
            Assert.AreEqual("Yo-yo", result.ElementAt(1).Name);          // 資料內容比對
            Assert.AreEqual("Hammer", result.ElementAt(2).Name);          // 資料內容比對
        }
        // 取得各產品的資料內容
        [TestMethod()]
        public void GetProduct() {
            ProductsController controller = new ProductsController();
            // 取得傳回的 IHttpActionResult, 轉成資料物件, 以取得內容
            IHttpActionResult actionResult1 = controller.GetProduct(1);
            var contentResult1 = (OkNegotiatedContentResult<Product>)actionResult1;
            IHttpActionResult actionResult2 = controller.GetProduct(2);
            var contentResult2 = (OkNegotiatedContentResult<Product>)actionResult2;
            IHttpActionResult actionResult3 = controller.GetProduct(3);
            var contentResult3 = (OkNegotiatedContentResult<Product>)actionResult3;           
            Assert.AreEqual("Tomato Soup", contentResult1.Content.Name);    // 資料內容比對
            Assert.AreEqual("Yo-yo", contentResult2.Content.Name);          // 資料內容比對
            Assert.AreEqual("Hammer", contentResult3.Content.Name);         // 資料內容比對
        }
    }
}

REST Web Service Response Codes

- Result of request operation
- 1xx series(100-199) - informational
- 2xx series - Success
- 3xx series - Redirection
- 4xx series - Client Error
- 5xx series - Server Error


Some commom codes:
200 OK
300 Multiple Choices
301 Moved Permanently
302 Found
304 Not Modified
307 Temporary Redirection
400 Bad Request
401 Unauthorized
403 Forbidden
404 Not Found
410 Gone
500 Internal Server Error
501 Not Implemented
503 Service Unavailable
550 Permission denied

[WebAPI]將 JSON 字串 POST 到 Web API

要將 JSON 編碼內容 POST 到 Web API, 首先要先準備一支方法程式 (method),用 JSON.NET 將資料轉換成 JSON 格式的字串資料,再利用 HttpClient 將它送到 Web API (遠端伺服器端) ,這一支方法程式的範例如下: ( JsonPostAsync method)


private static async Task<apiresult> JsonPostAsync(APIData apiData)
{
    APIResult fooAPIResult;
    using (HttpClientHandler handler = new HttpClientHandler())
    {
        using (HttpClient client = new HttpClient(handler))
        {
            try
            {
                #region 呼叫遠端 Web API
                string FooUrl = $"http://localhost:8089/api/Values"; 
                HttpResponseMessage response = null;

                #region  設定相關網址內容
                var fooFullUrl = $"{FooUrl}";

                // Accept 用於宣告客戶端要求服務端回應的文件型態 (底下兩種方法皆可任選其一來使用)
                //client.DefaultRequestHeaders.Accept.TryParseAdd("application/json");
                client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));

                // Content-Type 用於宣告遞送給對方的文件型態
                //client.DefaultRequestHeaders.TryAddWithoutValidation("Content-Type", "application/json");

                var fooJSON = JsonConvert.SerializeObject(apiData);
                // https://msdn.microsoft.com/zh-tw/library/system.net.http.stringcontent(v=vs.110).aspx
                using (var fooContent = new StringContent(fooJSON, Encoding.UTF8, "application/json"))
                {
                    response = await client.PostAsync(fooFullUrl, fooContent);
                }
                #endregion
                #endregion

                #region 處理呼叫完成 Web API 之後的回報結果
                if (response != null)
                {
                    if (response.IsSuccessStatusCode == true)
                    {
                        // 取得呼叫完成 API 後的回報內容
                        String strResult = await response.Content.ReadAsStringAsync();
                        fooAPIResult = JsonConvert.DeserializeObject<apiresult>(strResult, new JsonSerializerSettings { MetadataPropertyHandling = MetadataPropertyHandling.Ignore });
                    }
                    else
                    {
                        fooAPIResult = new APIResult
                        {
                            Success = false,
                            Message = string.Format("Error Code:{0}, Error Message:{1}", response.StatusCode, response.RequestMessage),
                            Payload = null,
                        };
                    }
                }
                else
                {
                    fooAPIResult = new APIResult
                    {
                        Success = false,
                        Message = "應用程式呼叫 API 發生異常",
                        Payload = null,
                    };
                }
                #endregion
            }
            catch (Exception ex)
            {
                fooAPIResult = new APIResult
                {
                    Success = false,
                    Message = ex.Message,
                    Payload = ex,
                };
            }
        }
    }

    return fooAPIResult;
}


接下來,我們須在控制器 (Controller) 中加上一個 Post 的方法 (method),

[HttpPost]
public APIResult Post([FromBody]APIData value)
{
    APIResult foo;

    if (value.Id == 777)
    {
        foo = new APIResult()
        {
            Success = true,
            Message = "透過 post 方法,接收到 Id=777 資料",
            Payload = value
        };
    }
    else
    {
        foo = new APIResult()
        {
            Success = false,
            Message = "無法發現到指定的 ID",
            Payload = null
        };
    }
    return foo;
}


在這個 Post 方法中,我們帶入一個 APIData 型別的物件當物件中 Id 這個屬性值為 777 的時候,在 Web API 的動作將會回覆這次的呼叫是成功的且傳回資料型別為 APIData 的 value 物件,否則,會回覆此次呼叫失敗(無法發現到指定的 ID),並傳回 null。


在 Post 的方法實作完成後,接著我們要準備程式的進入點方法(Main method)。


static void Main(string[] args)
{
    var fooAPIData = new APIData()
    {
        Id = 777,
        Name = "VulcanSource",
    };
    var foo = JsonPostAsync(fooAPIData).Result;
    Console.WriteLine($"使用 JSON 格式與使用 Post 方法呼叫 Web API 的結果");
    Console.WriteLine($"結果狀態 : {foo.Success}");
    Console.WriteLine($"結果訊息 : {foo.Message}");
    Console.WriteLine($"Payload : {foo.Payload}");
    Console.WriteLine($"");

    Console.WriteLine($"Press any key to Exist...{Environment.NewLine}");
    Console.ReadKey();

    fooAPIData = new APIData()
    {
        Id = 123,
        Name = "VulcanSource",
    };
    foo = JsonPostAsync(fooAPIData).Result;
    Console.WriteLine($"使用 JSON 格式與使用 Post 方法呼叫 Web API 的結果");
    Console.WriteLine($"結果狀態 : {foo.Success}");
    Console.WriteLine($"結果訊息 : {foo.Message}");
    Console.WriteLine($"Payload : {foo.Payload}");
    Console.WriteLine($"");

    Console.WriteLine($"Press any key to Exist...{Environment.NewLine}");
    Console.ReadKey();
}


方法中我們分為兩個部分,先是傳送  Id 這個屬性值為 777 的資料到 Web API ,接著再傳送  Id 這個屬性值為 123 的資料到 Web API ,看看這兩個部分執行後得到的結果是不是如預期。


在此,執行結果我們就不再演示,希望此文章能對你有幫助。




[C#]調用C++及Java方法實例詳解

C#可以直接引用C++的DLL和轉換Java寫好的程序。最近由於工作原因接觸這方面比較多,根據實際需求,我們通過一個具體例子把一個JAVA方法轉換成可以由C#直接調用的DLL。



C#調用c++
C#調用C++的例子網上很多,以一個C++的具體方法為例。
C++代碼
// 獲取一幀圖像數據
MVSMARTCAMCTRL_API int __stdcall MV_SC_GetOneFrame(IN void* handle, 
IN OUT unsigned char *pData , 
IN unsigned int nDataSize, 
IN OUT MV_SC_IMAGE_OUT_INFO* pstImageInfo);
// 結果數據緩存的上限
#define MV_SC_MAX_RESULT_SIZE (1024*16)
// 輸出幀的信息
typedef struct _MV_SC_IMAGE_OUT_INFO_
{
unsigned short nWidth; // 圖像寬
unsigned short nHeight; // 圖像高
unsigned int nFrameNum; // 幀號
unsigned int nFrameLen; // 當前幀數據大小
unsigned int nTimeStampHigh; // 時間戳高32位
unsigned int nTimeStampLow; // 時間戳低32位
unsigned int nResultType; // 輸出的消息類型
// 根據消息類型對應不同的結構體
unsigned char chResult[MV_SC_MAX_RESULT_SIZE];
unsigned int nReserved[8]; // 保留
}MV_SC_IMAGE_OUT_INFO 

C#代碼
/// <summary>
/// 獲得相機所拍照片
/// </summary>
/// <param name="handle"></param>
/// <returns></returns>
[DllImport("MvSmartCamCtrl.dll")]
public static extern int MV_SC_GetOneFrame(IntPtr handle, Byte[] pData, int nDataSize, out MV_SC_IMAGE_OUT_INFO pstDevInfo);
// 輸出幀的信息
[StructLayout(LayoutKind.Sequential)]
public struct MV_SC_IMAGE_OUT_INFO
{
public short nWidth; // 圖像寬
public short nHeight; // 圖像高
public int nFrameNum; // 幀號
public int nFrameLen; // 當前幀數據大小
public int nTimeStampHigh; // 時間戳高32位
public int nTimeStampLow; // 時間戳低32位
public int nResultType; // 輸出的消息類型
// 根據消息類型對應不同的結構體
[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 1024 * 16)]
public MV_SC_RESULT_BCR chResult;
[MarshalAs(UnmanagedType.ByValArray, SizeConst = 8)]
public int[] nReserved;
}


這樣我們把這個DLL放在程序根目錄下,就能實現DLL方法的調用。


C#調用JAVA方法

IKVM.NET是一個針對Mono和微軟.net框架的java實現,其設計目的是在.NET平臺上運行java程序。它包含了以下的組件:用.NET實現的java虛擬機,java類庫的.NET實現。
致力於在java和.NET之間交互的工具。

程序需求

我們有一個JAVA寫好的Demo,傳的參數是用Gzip進行壓縮傳到服務器的,代碼如下:

package Demo;

import java.io.BufferedReader;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.util.zip.GZIPInputStream;
import java.util.zip.GZIPOutputStream;
import org.apache.commons.httpclient.HttpClient;
import org.apache.commons.httpclient.methods.PostMethod;
import org.apache.commons.httpclient.params.HttpClientParams;
import com.Google.gson.Gson;

public class Demo
{

    public static String doPostClient(String json, String url)
    {
        HttpClient httpClient = new HttpClient();
        String rval = "";
        PostMethod postMethod = new PostMethod(url);
        try
        {
            Gson gson = new Gson();
            InputStream in = new ByteArrayInputStream(objectToByte(json));
            postMethod.setRequestBody(in);
            HttpClientParams params = new HttpClientParams();
            httpClient.setParams(params);
            httpClient.executeMethod(postMethod);
            byte[] b = postMethod.getResponseBody();
            String rtnData = http://www.cnblogs.com/kaoleba/p/(String) byteToObject(b);
            rval = gson.toJson(rtnData);
        } catch (Exception e)
        {
            rval="erro:"+e.getmessage();
        } finally
        {
            postMethod.releaseConnection();
        }
        return rval;
    }

    public static byte[] objectToByte(java.lang.Object obj)
    {
        byte[] bytes = null;
        ObjectOutputStream oo = null;
        try
        {
            ByteArrayOutputStream out = new ByteArrayOutputStream();
            GZIPOutputStream gzip = new GZIPOutputStream(out);
            gzip.write(obj.toString().getBytes("utf-8"));
            gzip.close();
            bytes = out.toByteArray();

        } catch (Exception e)
        {
            e.printStackTrace();
        } finally
        {
            if (oo != null)
            {
                try
                {
                    oo.close();
                } catch (IOException e)
                {
                    e.printStackTrace();
                }
            }
        }
        return bytes;
    }

    private static java.lang.Object byteToObject(byte[] bytes)
    {
        String obj = "";
        ObjectInputStream oi = null;
        try
        {
            ByteArrayInputStream bi = new ByteArrayInputStream(bytes);
            GZIPInputStream gzipi = new GZIPInputStream(bi);
            BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(gzipi, "UTF-8"));
            String line;
            while ((line = bufferedReader.readLine()) != null)
            {
                obj+=line;              
            }
        } catch (Exception e)
        {
            e.printStackTrace();
        } finally
        {
            if (oi != null)
            {
                try
                {
                    oi.close();
                } catch (IOException e)
                {
                    e.printStackTrace();
                }
            }
        }
        return obj;
    }

}
這個代碼我用C#改寫了,用HttpWebRequest的方式傳到服務器,服務器那邊Gzip解壓不了,查了原因是因為Java與C#的Byte類型值範圍不同,我們有兩種解決思路,一種是將這個JAVA做成webservice掛在服務器上,c#再去調用,第二種就是將這個方法編譯成可由C#直接調用的DLL,由於這個方法功能比較單一,我們選取了後者。

環境配置

IKVM.NET 下載後解壓得到BIN文件夾中的數據,用於JAR包轉換和基礎DLL。
IKVM.OpenJDK.ClassLibrary.dll用於C#程序接入。
下載地址:https://yunpan.cn/cBHTS5fXsIe9v 訪問密碼 0847。
將IKVM.NET的BIN文件夾的地址添加到環境變量。
計算機右鍵屬性--高級系統設置--高級--環境變量--在系統變量中找到PATH--將BIN文件夾的地址添加進去,
在CMD中輸入ikvmc 有幫助文檔說明環境配置成功。
Bin文件夾下的IKVM.OpenJDK.Core.dll,IKVM.Runtime.dll,IKVM.Runtime.JNI.dll和IKVM.OpenJDK.ClassLibrary.dll為公共DLL,所有轉換程序都需引用

轉換步驟

1.確定引用關系:
該Demo的結構如下:
Demo.jar 依賴於 commons-httpclient-3.1.jar 和 gson-2.4.jar
commons-httpclient-3.1.jar 依賴於 commons-logging-1.1.3.jar 和 commons-codec-1.6.jar
我們先將gson-2.4.jar,commons-logging-1.1.3.jar,commons-codec-1.6.jar 生成DLL,語法如下:
ikvmc JAR包物理路徑。
win7系統默認生成在C:\Users\Administrator 這個文件夾下
commons-httpclient-3.1.dll 生成語法如下:
ikvmc commons-httpclient-3.1.jar -r:commons-logging-1.1.3.dll -r:commons-codec-1.6.dll
我們將Demo打包的名字為JavaApi.Demo 這樣生成的 JavaApi.dll 生成語法如下:
ikvmc JavaApi.Demo.jar -r:commons-httpclient-3.1.dll -r:gson-2.4.dll
上面的文件都是相對應的物理路徑,然後將所有生成的DLL添加到C#項目中引用,包括之前的公共DLL,引用到項目中所有引用的DLL如圖:
這樣就可以直接在程序中使用這個java方法了
Demo.Demo.doPostClient(js, url);
第一個Demo java程序中的package名。
第二個Demo java程序中的class名。

以上所述是小編給大家介紹的C#調用Java方法實例詳解的全部敘述,希望對大家有所幫助,如果大家想了解更多內容敬請關註腳本之家網站!



資料來源: http://www.itread01.com/articles/1476133211.html

[C#]Windows 10 停用與啟用網路卡(連線)[手把手教程][原創]

當我們要停用或啟用網路連線的時候,手動的方式是用滑鼠點選畫面左下角的開始,再點選齒輪圖示






就可以進入到 Windows 設定的功能選擇畫面,我們選擇網路與網際網路





接著我們點選變更介面卡選項,就可以到網路連線的設定畫面了。








畫面中會出現很多的網路連線設定項目,你可以在你要變更設定的網路連線項目上按下滑鼠的右鍵,就會出現功能表。







功能表的第一項就是停用或啟用 用滑鼠點選它你就可以完成停用或啟用









接著我們進入到真正的主題,就是如何撰寫程式來停用或啟用網路連線,首先我們需要一個元件,這個元件的位置是在 C:\Windows\System32\hnetcfg.dll ,你需要先將它設定為參考 。







然後再將它設定為引用(using NETCONLib;),你就可以使用這個元件了,原始碼如下:




using System;

using NETCONLib;

namespace IC4 {
    class Program {
        static void Main(string[] args) {
            try {
                NetSharingManagerClass netSharingMgr = new NetSharingManagerClass();
                INetSharingEveryConnectionCollection connections = netSharingMgr.EnumEveryConnection;
                foreach(INetConnection connection in connections) {
                    INetConnectionProps connProps = netSharingMgr.get_NetConnectionProps(connection);
                    if(connProps.Name == "MyNetworkInterface") { //須設定成你自己的網路連線名稱
                        connection.Disconnect(); //停用網絡
                        connection.Connect();    //啟用網絡
                    }
                }
            }
            catch(Exception ex) {
                Console.WriteLine(ex.ToString());
            }
            Console.WriteLine("Press any key...");
            Console.ReadKey();
        }
        static void Enable(string interfaceName) {
            System.Diagnostics.ProcessStartInfo psi =
                   new System.Diagnostics.ProcessStartInfo("netsh", "interface set interface \"" + interfaceName + "\" enable");
            System.Diagnostics.Process p = new System.Diagnostics.Process();
            p.StartInfo = psi;
            p.Start();
        }
        static void Disable(string interfaceName) {
            System.Diagnostics.ProcessStartInfo psi =
                new System.Diagnostics.ProcessStartInfo("netsh", "interface set interface \"" + interfaceName + "\" disable");
            System.Diagnostics.Process p = new System.Diagnostics.Process();
            p.StartInfo = psi;
            p.Start();
        }
    }
}


說明:
先建立一個 "主控台應用程式" 的專案,再將我提供的程式複製到你的專案中。



 Disconnect() 就是停用
Connect() 就是啟用

你可以自由決定是要停用或啟用網路卡(連線)


在程式中有一行需要稍微注意一下

if(connProps.Name == "MyNetworkInterface") { //須設定成你自己的網路連線名稱


這一行程式中的 "MyNetworkInterface" 你必須將它改成你自已的網路卡(連線)的名稱,程式就可以將它停用或啟用。

[Facebook][ASP.Net]如何成為 Facebook 的開發人員-開發人員帳號(2)

你可以透過下列的網址申請你的開發人員帳號

https://developers.facebook.com/docs/apps/register?locale=zh_TW#developer-account

進入網頁畫面後點選下圖的按鈕 就可以進入申請的畫面



點選下一步繼續申請的操作



填寫你想要建立的應用程式名稱及你的聯絡電子郵件資料然後按下一步



如果畫面上有出現安全認證那麼你可以勾選你不是機器人然後按提交, 接著系統會問你以下何者最符合你的角色你可以依你的狀況去做選擇




在你選擇後系統就會進入歡迎使用 臉書開發人員主控版的畫面, 點選加入你的第一個產品




就可以完成你開發者帳戶的申請, 進入到開發者商品的設定畫面, 你可以在這個畫面中選擇你要開發的工作, 例如Facebook登入、 Account kit...等。