Merge branch 'master' of ssh://git.swordlost.top:222/SikongJueluo/FPGA_WebLab into dpp
This commit is contained in:
commit
301b2a20f4
|
@ -184,15 +184,48 @@ public class JtagController : ControllerBase
|
||||||
else { return TypedResults.InternalServerError(ret.Error); }
|
else { return TypedResults.InternalServerError(ret.Error); }
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// 通过Jtag下载比特流文件
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="address"> 设备地址 </param>
|
||||||
|
/// <param name="port"> 设备端口 </param>
|
||||||
|
/// <param name="file">比特流文件(最大32MB)</param>
|
||||||
[HttpGet("DownloadBitstream")]
|
[HttpGet("DownloadBitstream")]
|
||||||
[ProducesResponseType(StatusCodes.Status200OK)]
|
[ProducesResponseType(StatusCodes.Status200OK)]
|
||||||
[ProducesResponseType(StatusCodes.Status500InternalServerError)]
|
[ProducesResponseType(StatusCodes.Status500InternalServerError)]
|
||||||
public async ValueTask<IResult> DownloadBitstream(string address, int port, IFormFile file)
|
public async ValueTask<IResult> DownloadBitstream(string address, int port, IFormFile file)
|
||||||
{
|
{
|
||||||
var jtagCtrl = new JtagClient.Jtag(address, port);
|
// 检查文件
|
||||||
var ret = await jtagCtrl.DownloadBitstream();
|
if (file is null || file.Length <= 0)
|
||||||
|
throw new ArgumentException("Empty file", nameof(file));
|
||||||
|
|
||||||
if (ret.IsSuccessful) { return TypedResults.Ok(ret.Value); }
|
// 定义缓冲区大小(例如:1MB)
|
||||||
else { return TypedResults.InternalServerError(ret.Error); }
|
const int bufferSize = 1024 * 1024; // 1MB
|
||||||
|
byte[] buffer = new byte[bufferSize];
|
||||||
|
long totalBytesRead = 0;
|
||||||
|
|
||||||
|
// 使用异步流读取文件
|
||||||
|
using (var memoryStream = new MemoryStream())
|
||||||
|
{
|
||||||
|
using (var stream = file.OpenReadStream())
|
||||||
|
{
|
||||||
|
int bytesRead;
|
||||||
|
while ((bytesRead = await stream.ReadAsync(buffer, 0, buffer.Length)) > 0)
|
||||||
|
{
|
||||||
|
await memoryStream.WriteAsync(buffer, 0, bytesRead);
|
||||||
|
totalBytesRead += bytesRead;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// 将所有数据转换为字节数组(注意:如果文件非常大,可能不适合完全加载到内存)
|
||||||
|
byte[] fileBytes = memoryStream.ToArray();
|
||||||
|
|
||||||
|
// 下载比特流
|
||||||
|
var jtagCtrl = new JtagClient.Jtag(address, port);
|
||||||
|
var ret = await jtagCtrl.DownloadBitstream(fileBytes);
|
||||||
|
|
||||||
|
if (ret.IsSuccessful) { return TypedResults.Ok(ret.Value); }
|
||||||
|
else { return TypedResults.InternalServerError(ret.Error); }
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -532,6 +532,9 @@ class Jtag
|
||||||
|
|
||||||
public async ValueTask<Result<bool>> DownloadBitstream(byte[] bitstream)
|
public async ValueTask<Result<bool>> DownloadBitstream(byte[] bitstream)
|
||||||
{
|
{
|
||||||
|
// Clear Data
|
||||||
|
await MsgBus.UDPServer.ClearUDPData(this.address);
|
||||||
|
|
||||||
{
|
{
|
||||||
var ret = await CloseTest();
|
var ret = await CloseTest();
|
||||||
if (!ret.IsSuccessful) throw ret.Error;
|
if (!ret.IsSuccessful) throw ret.Error;
|
||||||
|
|
Loading…
Reference in New Issue