При отправке большого файла из приложения формы Windows в. net core web api, необходимо разбить файл на стороне клиента и объединить файл на стороне сервера. Так что фрагмент кода на стороне клиента работает хорошо. Но на стороне сервера полученный чанк-файл точно такой же, как и клиентский чанк-файл. Но при объединении это дополнительное пространство добавляется в конец файла. При применении алгоритма ha sh он показывает, что это были другие файлы.
на стороне клиента:
string filepath = @"file.txt";
string splitpath = @"split.txt";
int chunksize =2097152; //2 mb
using ( var file = new FileStream (filepath,Filemode.open,fileaccess.read))
{
int totalchunks = (int)(file.length/chunksize);
if(file.length % chunksize !=0)
{
totalchunks++;
}
int i=0;
while(true)
{
using(MemoryStream ms =new MemoryStream ())
{
long position = (i* (long) chunksize );
int read = (int) Math.Min(file.Length - position -1, chunksize);
if(read<=0)
{
break;
}
byte[] buffer = new byte[read];
file.Read(buffer,0,buffer.length);
ms.Write(buffer,0,buffer.length);
using ( var file1= new FileStream ( path+ i.tostring()+".txt",File.create,File.Write))
{
ms.writeTo(file1);
file1.close();
}
i++;
ms.flush();
}
}
}
cl inet код разбивает файл на файлы размером 2 МБ. Остальные будут работать как размер баланса.
Сторона сервера;
public class CloudController : Controller
{
[route("upload")]
public void upload(List<IFormFile> files)
{
// separately wrote all the chunk files ll work exactly.source code is below
int i=0;
foreach(var file in files)
{
using ( var file1= new FileStream ( path+ i.tostring()+".txt",File.create,File.Write))
{
if(file.length>0)
{
file.CopyTo(file1);
i++;
file1.close();
}
}
}
// what i want is while merging the files with memory stream the last characters of file was not exactly as original file.extra space is appending in last line alone.
string path = @"sample.txt";
var filestream = new MemoryStream ();
{
foreach(var file in files)
{
if(file.length>0)
{
file.copyto(filestream);
}
}
}
filestream.seek(0,seekorigin.begin);
using ( FileStream file1= new FileStream ( path,File.create,File.Write))
{
filestream.copyto(file1);
file1.close();
}
filestream.close();
}
If server side directly write the chunk file was working fine .
But using memory stream for merging extra space is append in the last character.
Ex ;
Client side I have split the file as 3 parts.and server side k received the files and write the all files.it was working fine.but combining the 3 files into the single file cause en extra line and space.