Пример #1
0
        private FileHttpResponseMessage GetFileResponse(string fileName)
        {
            FileHttpResponseMessage result = new FileHttpResponseMessage(fileName);

            result.StatusCode = HttpStatusCode.OK;
            var stream = new FileStream(fileName, FileMode.Open);

            result.Content = new StreamContent(stream);
            result.Content.Headers.ContentDisposition          = new ContentDispositionHeaderValue("attachment");
            result.Content.Headers.ContentDisposition.FileName = Path.GetFileName(fileName);
            result.Content.Headers.ContentType   = new MediaTypeHeaderValue("application/octet-stream");
            result.Content.Headers.ContentLength = stream.Length;
            return(result);
        }
Пример #2
0
        public async Task <IHttpActionResult> Download(string url)
        {
            Log.Info("Request for {0}", Request.RequestUri);
            using (var transaction = db.Database.BeginTransaction())
            {
                try
                {
                    Guid guidFromUrl;
                    if (!Guid.TryParse(url, out guidFromUrl))
                    {
                        Log.Warn("Wrong request format. Wrong Guid: {0}", url);
                        return(BadRequest("Wrong format of last Url parameter"));
                    }

                    var tradeFile = db.TradeFiles.AsNoTracking().FirstOrDefault(f => f.URL.Equals(url));

                    if (tradeFile == null)
                    {
                        Log.Warn("File by such Guid doesn't exist anymore.");
                        return(BadRequest("File by such Url doesn't exist anymore"));
                    }

                    FileHttpResponseMessage result = GetFileResponse(tradeFile.Name);
                    var res = ResponseMessage(result);

                    db.TradeFiles.Attach(tradeFile);
                    db.Entry(tradeFile).State = EntityState.Deleted;
                    await db.SaveChangesAsync();

                    transaction.Commit();

                    return(res);
                }
                catch (Exception ex)
                {
                    transaction.Rollback();
                    Log.Error("Exception message {0}. Stack Trace: {1}", ex.Message, ex.StackTrace);
                    return(ResponseMessage(new HttpResponseMessage(HttpStatusCode.InternalServerError)));
                }
            }
        }