處理文件的ByteArray我有一個閃存錄像機,記錄用戶的輸入,並給我一個文件的ByteArray在Javascript我怎麼能在Javascript
現在我想的是字節數組上傳到服務器( MVC3),我想知道我該怎麼做?
處理文件的ByteArray我有一個閃存錄像機,記錄用戶的輸入,並給我一個文件的ByteArray在Javascript我怎麼能在Javascript
現在我想的是字節數組上傳到服務器( MVC3),我想知道我該怎麼做?
您可以使用AJAX請求將字節數組作爲原始數據發送到服務器。我們可以實現自定義模型粘結劑,將讀取原始請求主體,並將其映射到byte[]
:
public class ByteArrayModelBinder : IModelBinder
{
public object BindModel(ControllerContext controllerContext, ModelBindingContext bindingContext)
{
var request = controllerContext.HttpContext.Request;
var buffer = new byte[request.InputStream.Length];
request.InputStream.Read(buffer, 0, buffer.Length);
return buffer;
}
}
那麼我們就可以有一個控制器動作,將接收到這個請求:
[HttpPost]
public ActionResult Upload([ModelBinder(typeof(ByteArrayModelBinder))] byte[] buffer)
{
// TODO: do something with the uploaded data
return Json(true);
}
最後在客戶端發送AJAX請求:
// create sample data from the A,B,C bytes:
var data = String.fromCharCode(65, 66, 67);
$.ajax({
url: '@Url.Action("upload")',
type: 'POST',
contentType: 'application/octet-stream',
processData: false,
data: data,
success: function (result) {
alert(result);
}
});
這沒有與我一起工作,首先你提供了數據兩次,所以我刪除了第一個,現在每次它發佈到服務器它張貼緩衝區爲空! – Stacker 2012-01-15 11:46:15
@Stacker,哎呀,我的錯。那麼,假設你有一個如我的例子中所示的字節數組,你應該可以將它發佈到一個控制器動作,它將採用'byte []'作爲參數。然後在我展示的自定義模型聯編程序中,您可以閱讀請求流的主體。我測試了它,它工作正常。也許您在腳本中的數據與我展示的數據格式不同?請注意,'fromCharCode'方法不包含數組。它需要多個參數。所以,如果你有一個數組''[65,66,67]',它將無法工作...... – 2012-01-15 11:50:57
...在這種情況下,你將不得不爲你的字節數組的每個元素調用'fromCharCode'並且連接它轉換成您將發送到服務器的最終數據。 – 2012-01-15 11:53:02
您是否嘗試過簡單地將您的字節數組發佈到控制器方法?如果你使用jquery,只需要使用$ .ajax或$ .post,並根據你的路由安排將請求發送到正確的位置。
我該怎麼做?你能提供一個示例代碼嗎?因爲我不知道如何將一個「ByteArray」放入控制器 – Stacker 2012-01-15 09:21:29
發佈我的方法與上面的評論相同,這些方法沿着: – Rayner 2012-01-16 10:06:48
'//創建來自A的示例數據,B,C字節: var data = String.fromCharCode(65,66,67); $就({ URL: '@ Url.Action( 「上載」)', 類型: 'POST', 的contentType: '應用/八位字節流', 過程數據:假, 數據:數據, 成功:功能(結果){ alert(result); } });' – Rayner 2012-01-16 10:07:17
你嘗試過什麼嗎? – annonymously 2012-01-15 08:31:15