public async Task <HttpResponseMessage> UploadToBlob() { string squestion_id = "questionId"; string sanswerId = "answerId"; string stitle = "title"; string bmaturity = "maturity"; int assessmentId = Auth.AssessmentForUser(); string fileHash; try { FileUploadStream fileUploader = new FileUploadStream(); Dictionary <string, string> formValues = new Dictionary <string, string>(); formValues.Add(squestion_id, null); formValues.Add(sanswerId, null); formValues.Add(stitle, null); formValues.Add(bmaturity, null); FileUploadStreamResult streamResult = await fileUploader.ProcessUploadStream(this.Request, formValues); // Find or create the Answer for the document to be associated with. // If they are attaching a document to a question that has not yet been answered, // the answerId will not be sent in the request. int questionId = int.Parse(streamResult.FormNameValues[squestion_id]); int answerId; bool isAnswerIdProvided = int.TryParse(streamResult.FormNameValues[sanswerId], out answerId); string title = streamResult.FormNameValues[stitle]; bool isMaturity = false; bool.TryParse(streamResult.FormNameValues[bmaturity], out isMaturity); if (!isAnswerIdProvided) { QuestionsManager qm = new QuestionsManager(assessmentId); Answer answer = new Answer(); answer.QuestionId = questionId; answer.AnswerText = "U"; answer.QuestionType = isMaturity ? "Maturity" : ""; answerId = qm.StoreAnswer(answer); } var dm = new DocumentManager(assessmentId); using (CSET_Context db = new CSET_Context()) { dm.AddDocument(title, answerId, streamResult); } // Return a current picture of this answer's documents return(Request.CreateResponse(dm.GetDocumentsForAnswer(answerId))); } catch (System.Exception e) { return(Request.CreateErrorResponse(HttpStatusCode.InternalServerError, e)); } }
/// <summary> /// /// </summary> /// <param name="fileName"></param> /// <param name="tmpFilename"></param> /// <param name="fileHash"></param> /// <param name="answerId"></param> /// <param name="File_Upload_Id"></param> /// <param name="stream_id">only used if moving away from the blob process</param> public void AddDocument(string title, int answerId, FileUploadStreamResult result) { if (string.IsNullOrWhiteSpace(title)) { title = "click to edit title"; } foreach (var file in result.FileResultList) { // first see if the document already exists on any question in this Assessment, based on the filename and hash var doc = db.DOCUMENT_FILE.Where(f => f.FileMd5 == file.FileHash && f.Name == file.FileName && f.Assessment_Id == this.assessmentId).FirstOrDefault(); if (doc == null) { doc = new DOCUMENT_FILE() { Assessment_Id = this.assessmentId, Title = title, Path = file.FileName, // this may end up being some other reference Name = file.FileName, FileMd5 = file.FileHash, ContentType = file.ContentType, Data = file.FileBytes }; } else { doc.Title = title; doc.Name = file.FileName; } var answer = db.ANSWER.Where(a => a.Answer_Id == answerId).FirstOrDefault(); db.DOCUMENT_FILE.AddOrUpdate(doc, x => x.Document_Id); db.SaveChanges(); DOCUMENT_ANSWERS temp = new DOCUMENT_ANSWERS() { Answer_Id = answer.Answer_Id, Document_Id = doc.Document_Id }; if (db.DOCUMENT_ANSWERS.Find(temp.Document_Id, temp.Answer_Id) == null) { db.DOCUMENT_ANSWERS.Add(temp); } else { db.DOCUMENT_ANSWERS.Update(temp); } db.SaveChanges(); CSETWeb_Api.BusinessLogic.Helpers.AssessmentUtil.TouchAssessment(doc.Assessment_Id); } }
public async Task <int> UploadReferenceDoc() { try { FileUploadStream fileUploader = new FileUploadStream(); Dictionary <string, string> formValues = new Dictionary <string, string>(); formValues.Add("title", null); formValues.Add("setName", null); FileUploadStreamResult streamResult = await fileUploader.ProcessUploadStream(this.Request, formValues); // Create a GEN_FILE entry, and a SET_FILES entry. ModuleBuilderManager m = new ModuleBuilderManager(); return(m.RecordDocInDB(streamResult)); } catch (System.Exception e) { throw e; // throw Request.CreateErrorResponse(HttpStatusCode.InternalServerError, e); } }