如何在文件流上设置FileType

问题描述 投票:0回答:1

我正在尝试从c#发送文件流到我的js后端。名称和路径可以正确发送,但是当我记录进入后端的文件时,该类型和类型似乎丢失了,我绝对需要该文件类型,但是我不知道该如何传递。有人可以帮我吗?

进入的对象:

File {
  _events: [Object: null prototype] {},
  _eventsCount: 0,
  _maxListeners: undefined,
  size: 13920,
  path: '/var/folders/5g/f343vctd6hd7smyd5ybnfp4m0000gn/T/upload_4aebdbbee06344e12d8566dd706fd1e6',
  name: 'Invoice19.pdf',
  type: null,
  hash: null,
  lastModifiedDate: 2020-03-17T14:11:04.812Z,
  _writeStream: WriteStream {
    _writableState: WritableState {
      objectMode: false,
      highWaterMark: 16384,
      finalCalled: true,
      needDrain: false,
      ending: true,
      ended: true,
      finished: true,
      destroyed: true,
      decodeStrings: true,
      defaultEncoding: 'utf8',
      length: 0,
      writing: false,
      corked: 0,
      sync: false,
      bufferProcessing: false,
      onwrite: [Function: bound onwrite],
      writecb: null,
      writelen: 0,
      bufferedRequest: null,
      lastBufferedRequest: null,
      pendingcb: 0,
      prefinished: true,
      errorEmitted: false,
      emitClose: false,
      autoDestroy: false,
      bufferedRequestCount: 0,
      corkedRequestsFree: [Object]
    },
    writable: false,
    _events: [Object: null prototype] {},
    _eventsCount: 0,
    _maxListeners: undefined,
    path: '/var/folders/5g/f343vctd6hd7smyd5ybnfp4m0000gn/T/upload_4aebdbbee06344e12d8566dd706fd1e6',
    fd: null,
    flags: 'w',
    mode: 438,
    start: undefined,
    autoClose: true,
    pos: undefined,
    bytesWritten: 13920,
    closed: false
  }
}

我的C#代码

 public IAsyncResult BeginExecute()
        {
            // set authentication
            client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", BearerToken);
            string url = "http://12915520.ngrok.io/api/organisations/" + OrganisationId + "/projects/" + ProjectId + "/process";
            string response = null;
            bool succesfullRequest = false;
            try
            {
                using (FileStream fs = File.Open(@"C:\Users\X Y\Downloads\Invoice19.pdf", FileMode.Open, FileAccess.Read))
                {
                    // send the content to the backend, parse results
                    HttpContent content = new StreamContent(fs);

                    MultipartFormDataContent formdata = new MultipartFormDataContent();
                    formdata.Add(content, "files", "Invoice19.pdf");
                    var result = client.PostAsync(url, formdata).Result;
                    response = result.Content.ReadAsStringAsync().Result;
                    succesfullRequest = result.IsSuccessStatusCode;
                }
            }
            // I absolutely want to catch every exception and pass these along to the workflow
            catch (Exception ex)
            {
                ExceptionDispatchInfo.Capture(ex.InnerException).Throw();
                throw;
            }
            // if something went wrong in the backend, throw an error
            if (!succesfullRequest)
            {
                throw new Exception("Something went wrong during the upload process");
            }

            UploadResponse r = JsonConvert.DeserializeObject<UploadResponse>(response);
            Console.WriteLine("uploadresponse:" + r.ToString());

            // dirty solution: since we don't know how long the pipeline needs to process the upload, we'll be polling for a result
            // since this is a poc this is a temporary solution, if this gets released this needs to be rewritten (maybe with webhooks)
            //var polling = true;
            //do
            //{
            //    response = client.GetAsync(url + "/" + r.uploadId).Result.Content.ReadAsStringAsync().Result;
            //    if (response != "null")
            //    {
            //        polling = false;
            //    }
            //} while (polling);
            // Because we know that there is a response now, actually execute the request
            //return client.GetAsync(url + "/" + r.uploadId);
            return null;
        }
javascript c# filestream
1个回答
0
投票

我相信您需要更改使用MultipartFormDataContent()的方式>

这对我有用

using (var content = new MultipartFormDataContent())
{
    content.Add(new StreamContent(stream)
    {
        Headers =
        {
            ContentLength = stream.Length,
            ContentType = new MediaTypeHeaderValue([your content type])
        }
    }, "[name ex: file]", "[file name ex: file.jpg]");
}
© www.soinside.com 2019 - 2024. All rights reserved.