Я загружаю файл в webapi, который сохраняет файл (документы в формате pdf и word) в mongodb gridfs (v 2.6.1)
код webapi
var file = Request.Files[0];
var fileName = file.FileName;
var fileType = file.ContentType;
var document = blabl.UploadFile(fileName, fileType,ReadFully(file.InputStream));
преобразование входящего потока в байты
public static byte[] ReadFully(Stream input)
{
using (MemoryStream ms = new MemoryStream())
{
input.CopyTo(ms);
return ms.ToArray();
}
}
Код GridFs
var bucket = new GridFSBucket(_database, new GridFSBucketOptions
{
BucketName = bucketName,
WriteConcern = WriteConcern.WMajority,
ChunkSizeBytes = 1048576
});
var id = bucket.UploadFromBytes(fileName, source, options);
return id;
Код для загрузки
var bucket = new GridFSBucket(_database, new GridFSBucketOptions
{
BucketName = bucketName
});
return bucket.DownloadAsBytes(id);
WebAPI
HttpResponseMessage result = Request.CreateResponse(HttpStatusCode.OK);
result.Content = new ByteArrayContent(data);
result.Content.Headers.ContentDisposition = new ContentDispositionHeaderValue("attachment")
{
FileName = "MyPdf.pdf"
};
result.Content.Headers.ContentType = new MediaTypeHeaderValue("application/pdf");
return result;
код пользовательского интерфейса
$.ajax({
url:'path',
type: 'GET',
responseType: 'arraybuffer',
success: function (data)
{
var link = document.createElement('a');
if ('download' in link)
{
try {
var blob = new Blob([data], { type: contentType });
var url = urlCreator.createObjectURL(blob);
link.setAttribute('href', url);
link.setAttribute("download", filename);
var event = document.createEvent('MouseEvents');
event.initMouseEvent('click', true, true, window, 1, 0, 0, 0, 0, false, false, false, false, 0, null);
link.dispatchEvent(event);
} catch (ex)
{
console.log(ex);
}
}
}
});
После загрузки файл пуст.
Я был бы очень рад, если бы вы, ребята, указали мне правильное направление.