Example #1
0
        private void DownloadNamedWorkFile(int work_id, string filename)
        {
            DBWorkFileView view = null;
            DBFile         file = null;
            string         compressed_mime;

            using (DB db = new DB()) {
                WebServiceLogin login = Authentication.CreateLogin(Request);

                view = DBWorkFileView_Extensions.Find(db, work_id, filename);

                if (view == null)
                {
                    throw new HttpException(404, "Could not find the file.");
                }

                if (view.@internal)                 // internal files need admin rights
                {
                    Authentication.VerifyUserInRole(Context, db, login, Roles.Administrator, false);
                }
                else
                {
                    Authentication.VerifyAnonymousAccess(Context, db, login);
                }

                file = DBWork_Extensions.GetFile(db, view.work_id, filename, false);
                if (file == null)
                {
                    throw new HttpException(404, string.Format("Could not find the filename '{0}'", filename));
                }

                compressed_mime = file.compressed_mime;

                Response.ContentType = file.mime;
                Response.AppendHeader("Content-Disposition", "filename=\"" + Path.GetFileName(filename) + "\"");

                if (view.file_file_id == null)
                {
                    DownloadMd5(view.md5);
                }
                else
                {
                    using (Stream str = db.Download(view)) {
                        DownloadStream(str, compressed_mime);
                    }
                }
            }
        }
Example #2
0
        private void DownloadWorkFile(int workfile_id, string md5)
        {
            DBWorkFileView view = null;
            DBFile         file = null;
            string         filename;
            string         mime;
            string         compressed_mime;

            using (DB db = new DB()) {
                WebServiceLogin login = Authentication.CreateLogin(Request);

                filename = Request ["filename"];

                if (!string.IsNullOrEmpty(md5))                    // md5 lookup needs admin rights
                {
                    Authentication.VerifyUserInRole(Context, db, login, Roles.Administrator, false);
                    file = DBFile_Extensions.Find(db, md5);

                    if (file == null)
                    {
                        throw new HttpException(404, "Could not find the file.");
                    }

                    mime            = file.mime;
                    filename        = file.filename;
                    compressed_mime = file.compressed_mime;
                }
                else
                {
                    view = DBWorkFileView_Extensions.Find(db, workfile_id);

                    if (view == null)
                    {
                        throw new HttpException(404, "Could not find the file.");
                    }

                    if (view.@internal)                     // internal files need admin rights
                    {
                        Authentication.VerifyUserInRole(Context, db, login, Roles.Administrator, false);
                    }
                    else
                    {
                        Authentication.VerifyAnonymousAccess(Context, db, login);
                    }

                    if (!string.IsNullOrEmpty(filename))
                    {
                        file = DBWork_Extensions.GetFile(db, view.work_id, filename, false);
                        if (file == null)
                        {
                            throw new HttpException(404, string.Format("Could not find the filename '{0}'", filename));
                        }

                        mime            = file.mime;
                        compressed_mime = file.compressed_mime;
                        md5             = file.md5;

                        view = null;
                    }
                    else
                    {
                        mime            = view.mime;
                        filename        = view.filename;
                        compressed_mime = view.compressed_mime;
                    }
                }

                Response.ContentType = mime;
                Response.AppendHeader("Content-Disposition", "filename=\"" + Path.GetFileName(filename) + "\"");

                // any access rights verified, serve the file

                if (view != null)
                {
                    if (view.file_file_id == null)
                    {
                        DownloadMd5(view.md5);
                    }
                    else
                    {
                        using (Stream str = db.Download(view)) {
                            DownloadStream(str, compressed_mime);
                        }
                    }
                }
                else
                {
                    DownloadFile(db, file);
                }
            }
        }