Как загрузить файл с помощью вызова ASP.NET MVC Rest API и jQuery Ajax - PullRequest
0 голосов
/ 10 мая 2019

Я использую ASP.NET MVC, чтобы вызвать REST API для загрузки файла (любого типа). Я не уверен, как мне показать в браузере загрузку файла напрямую.

Файл может быть любого формата: pdf / image / excel / word / и т. Д.

Вот мой код из вызова jQuery, контроллера и REST API.

Пожалуйста, помогите мне, как мне вернуть данные файла из REST API -> controller -> jQuery?

jQuery Ajax Call. Это событие onclick на столе

//JQuery Ajax call to 'GetDocument'
$("#DivAttachmentDetails td ").click(function () {
    var DocumentumId = $('#hdnDocumentumId').val();
    $.ajax({
        type: 'POST',
        url: getExactPath('/Supplier/GetDocument'),
        data: {
            documetObj: DocumentumId
        },
        dataType: 'json',
        async: false,
        success: function (jsonData) {
            //alert('Hello');
        },
        error: function () {
            alert("Unable to fetch the Document.");
        }
    });
});

Метод контроллера, вызванный из jQuery:

//Method in the Controller called from jQuery Ajax.
public JsonResult GetDocument(string documetObj)
{
    DocumentumUtil dUtil = new DocumentumUtil();
    String dId;String fileName;String fileExt;String doc = "";
    String applicationType = "";
    String[] docum;                           
    docum = documetObj.Split(':');                
    dId = docum[0];
    fileName = docum[1].Substring(0, docum[1].LastIndexOf('.'));
    fileExt = docum[2];

    try
    {
        String contenType = dUtil.getFileContentType(dId); // Fetch the file content type based on DocumentumId
        doc = dUtil.getDocument(dId, fileName, contenType); 
    }
    catch(System.Exception ex) {}

    return this.Json("", JsonRequestBehavior.AllowGet);
}

Это вызов API REST:

// This is the method i am calling from Controller -GetDocument()
public String getDocument(String documentId, String fileName, String contenType)
{
    _httpClient = new HttpClient();
    D2Document newDocument = new D2Document();
    newDocument.SetPropertyValue("object_name", fileName);
    newDocument.SetPropertyValue("a_content_type", contenType);
    String documentURL = ConfigurationManager.AppSettings["DOCUMENTUM_URL"] + "objects/"+ documentId + "/content-media?format=" + contenType + "&modifier=&page=0";
    JSON_GENERIC_MEDIA_TYPE = new MediaTypeWithQualityHeaderValue("application/json");
    JSON_VND_MEDIA_TYPE = new MediaTypeWithQualityHeaderValue("application/vnd.emc.documentum+json");
    try
    {
        using (var multiPartStream = new MultipartFormDataContent())
        {
            String encoded = System.Convert.ToBase64String(System.Text.Encoding.GetEncoding("ISO-8859-1").GetBytes(username + ":" + password));
            request.Headers.Add("Authorization", "Basic " + encoded);
            var credentials = Convert.ToBase64String(Encoding.ASCII.GetBytes(string.Format("{0}:{1}", username, password)));
            _httpClient.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Basic", credentials);

            using (HttpResponseMessage response = _httpClient.GetAsync(documentURL).Result)
            {
                if (response != null)
                {
                    var responsestream = response.Content;
                }
            }
        }
    }
}

Как преобразовать содержимое в поток / байты?

1 Ответ

0 голосов
/ 07 июня 2019

Вот код, который я преобразовал в поток файлов.

using (HttpResponseMessage response = _httpClient.GetAsync(documentURL).Result)
        {
            if (response != null)
            {
             HttpContent content = response.Content;

            //Get the actual content stream
            Stream contentStream = content.ReadAsStreamAsyn().Result;
            //copy the stream to File Stream. "file" is the variable have the physical path location.
            contentStream.CopyTo(file);
            }
        }
...