当前位置:   article > 正文

UE4Http发送PDF文件,使用Webform网页服务器接收并下载_ue http上传文件

ue http上传文件

UE4Http发送PDF文件

通过Http发送PDF文件,主要是将PDF文件转换成二进制字节数据存入HTTP报文的content字段。难点在于设置报文的头部以及body字段。
例如,如果想要发送一个txt文件,具体的报文如下:
POST http://localhost:3000/uploadArray HTTP/1.1
Host: localhost:3000
Connection: keep-alive
Content-Length: 378
Content-Type: multipart/form-data; boundary=----WebKitFormBoundarymJztPE4VDNjFSyMs
Cookie: aclDemo=s%3A6EnRWWC4ayNlzrHjJ5oChupxpJk39bVO.wIwwsbkRndj9phHxPqsyNDYrgTrWv4nk2qEzUBb9tuI

------WebKitFormBoundarymJztPE4VDNjFSyMs
Content-Disposition: form-data; name=“myFiles”; filename=“file1.txt”
Content-Type: text/plain

AAAAAAAAAAAAAAAAAAAAAAAA
------WebKitFormBoundarymJztPE4VDNjFSyMs
Content-Disposition: form-data; name=“myFiles”; filename=“file2.txt”
Content-Type: text/plain

BBBBBBBBBBBBBBBBBBBBBBBBBb
------WebKitFormBoundarymJztPE4VDNjFSyMs–
代码中,主要需要设置的就是Content-Type: multipart/form-data; boundary=----WebKitFormBoundarymJztPE4VDNjFSyMs这部分的字段(一般来说常常在需要发送文件或者需要发送文件加文本的时候我们才会使用FromData类型的数据格式来发送),以及之后的boundary分割开的文件内容的字段,也就是Content-Disposition到boundary之间的部分,里面存放的就是具体的文件字节数据。
具体代码如下:

TArray<uint8> FileData;
    FFileHelper::LoadFileToArray(FileData, *FilePath);

    // 构造 HTTP 请求
    TSharedRef<IHttpRequest,ESPMode::ThreadSafe> HttpRequest = FHttpModule::Get().CreateRequest();
    HttpRequest->SetVerb("POST");
    HttpRequest->SetURL(Url);
  
    FString Boundary = "---------------------------" + FString::FromInt(FDateTime::Now().GetTicks());
    HttpRequest->SetHeader(TEXT("Content-Type"), TEXT("multipart/form-data; boundary =" + Boundary));
    HttpRequest->SetVerb(TEXT("POST"));

    //The bit array format of the request's content
    TArray<uint8> RequestContent;

    // The bit array format of a single file
    TArray<uint8> FileContent;
    if (FFileHelper::LoadFileToArray(FileContent, *FilePath))
    {
        // Begin Boundry
        FString BeginBoundry = "\r\n--" + Boundary + "\r\n";
        RequestContent.Append((uint8*)TCHAR_TO_ANSI(*BeginBoundry), BeginBoundry.Len());

        // File Header
        FString FileHeader = "Content-Disposition: form-data;name=\"myFile\";";
        FileHeader.Append("filename=\"" + FPaths::GetCleanFilename(FilePath) + "\"\r\n");
        FileHeader.Append("Content-Type: \r\n\r\n");
        RequestContent.Append((uint8*)TCHAR_TO_ANSI(*FileHeader), FileHeader.Len());

        // File Content
        RequestContent.Append(FileContent);
    }

    // End Boundry
    FString EndBoundary = "\r\n--" + Boundary + "--\r\n";
    RequestContent.Append((uint8*)TCHAR_TO_ANSI(*EndBoundary), EndBoundary.Len());

    HttpRequest->SetContent(RequestContent);
    HttpRequest->OnProcessRequestComplete().BindUObject(this, &UPDFHttpAsyncActionBase::HandleRequestNameRequest);
    HttpRequest->ProcessRequest();
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40

Webform接收并下载PDF

在webform窗体程序中,接收http中的文件主要通过Request的Files属性,该属性返回的是一个 HttpFileCollection类型的数据,可以通过键值对的方式获取对应的文件数据。具体代码如下:

 public void UploadPDF(HttpContext context)
        {
            // 获取上传的文件
            HttpFileCollection file = context.Request.Files;
            if (file != null && file.Count > 0)
            {
                // 指定保存文件的路径
                String dirPath = @"D:\upload\";
                if (!Directory.Exists(dirPath))
                {
                    Directory.CreateDirectory(dirPath);
                }
                string path = dirPath + file["myFile"].FileName;
               file["myFile"].SaveAs(path);
                // 将文件保存到指定路径
                /*using (var stream = new FileStream(path, FileMode.Create))
                {
                     file.CopyToAsync(stream);
                }*/

                context.Response.StatusCode = 200;
                context.Response.ContentType = "text/plain";
                context.Response.Write(path);
               
            }
            else
            {
                context.Response.StatusCode = 400;
                context.Response.ContentType = "text/plain";
                if (file != null)
                {
                    context.Response.Write("FileLengisNull");
                }
                else
                {
                    context.Response.Write("FileIsNull");
                }
                
               // context.Response.WriteAsync("Invalid request.");
            }
        }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41

上述例子为一个一般应用程序,file[“myFile”]中的myfile必须是和http请求中的name字段一样,就是上面UE代码 FString FileHeader = “Content-Disposition: form-data;name=“myFile”;”;中的name字段。
file[“myFile”]返回的是一个HttpPostedFile类型的数据,这个类型下面的SaveAs方法可用于存储文件。需要注意的是,这个函数的参数是一个绝对路径,并且如果路径中的文件夹名字不存在,不会自动新建一个文件,而是直接报错,所以使用的时候需要确保文件夹存才,因此在保存之前我加了一个路径判断的逻辑if (!Directory.Exists(dirPath))

以上就是UE4Http发送PDF文件,使用Webform网页服务器接收并下载的方法。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/很楠不爱3/article/detail/91201
推荐阅读
相关标签
  

闽ICP备14008679号