首页 > 系统相关 >powershell实现http上传文件

powershell实现http上传文件

时间:2023-05-04 18:34:27浏览次数:34  
标签:content http response listener context 上传 powershell

服务端代码

# 监听 IP 地址和端口
$ip = "127.0.0.1"
$port = 8080

# 设置上传目录
$uploadDir = "D:\uploads"

# 创建 HttpListener 对象并启动监听
$listener = New-Object System.Net.HttpListener
$listener.Prefixes.Add("http://$ip`:$port/")
$listener.Start()

Write-Host "Listening on http://$ip`:$port/"

# 循环处理客户端请求
while ($listener.IsListening) {
    $context = $listener.GetContext()
    
    # 处理 POST 请求
    if ($context.Request.HttpMethod -eq "POST") {
        $filename = $context.Request.Headers["X-FileName"]
        $filepath = Join-Path $uploadDir $filename
        $length = $context.Request.ContentLength64
        $content = New-Object byte[] $length
        $index = 0
        while($index -lt $length) {
          $read = $context.Request.InputStream.Read($content, 0, $content.Length)
          if($read -eq 0) {
            break
          }
          $index +=$read
        }
        
        # 写入文件
        [System.IO.File]::WriteAllBytes($filepath, $content)
        
        # 返回上传结果
        $response = $context.Response
        $response.StatusCode = 200
        $response.StatusDescription = "OK"
        $response.Close()
        $listener.Stop()
    } else {
        $response = $context.Response
        $response.StatusCode = 404
        $response.StatusDescription = "not found"
        $response.Close()
        $listener.Stop()
    }
}


客户端代码

# 发送 POST 请求上传二进制文件
$uri = "http://127.0.0.1:8080"
$filePath = "D:\1.txt"

Invoke-WebRequest -Uri $uri -Method POST -Headers @{"X-FileName" = "1.txt"} -InFile $filePath

pause

标签:content,http,response,listener,context,上传,powershell
From: https://www.cnblogs.com/wubenhui/p/17372166.html

相关文章

  • CentOS 下修改 WordPress 文件上传大小限制
    CentOS下可以通过修改php.ini来设置WordPress 文件上传大小限制。默认的php.ini文件是在/etc下。(对应的包:php-common)修改下面的几个参数:upload_max_filesize=64Mpost_max_size=64Mmax_execution_time=300修改后重启httpd。$servicehttpdrestart这样上传文......
  • Tinyhttpd:抓包分析【3】
    一、问题引入分析http就离不开报文,或者可以利用wireshark抓包解析报文。二、解决过程http协议基于tcp/ip之上的应用层。tcp三次握手httpgetrequest报文通过报文内容可以看到,客户端HTTPVersion是HTTP1.1。客户端请求方法:GEThttprespond报文通过报文内......
  • github修改好代码后上传已有仓库
    github修改好代码后上传已有仓库在GitHub上修改代码并将其推送到已有仓库的步骤如下:确保您的本地代码与GitHub仓库中的代码是同步的。您可以使用gitpull命令从远程仓库中获取最新代码并将其合并到您的本地代码中。如果您在本地进行了修改,请确保将其推送到远程仓库之前进行提交......
  • Python报错:Can't connect to HTTPS URL because the SSL module is not available
    参考文章:(32条消息)Can‘tconnecttoHTTPSURLbecausetheSSLmoduleisnotavailable-关于anaconda中的SSL模块错误_anacondahttps报错_Sky_Tree_Delivery的博客-CSDN博客具体操作:将以下文件移动位置D:\Anaconda\Library\bin->D:\Anaconda\DLLs(此处D盘为我自己的安......
  • vue 原生方法实现pc端调用摄像头全屏视频考试(实时截屏上传,并提示当前环节
    <template><div><el-row><el-col:span="10"style=""><div><el-cardstyle="margin:0;padding:0;overflow-y:auto"><divstyle="width:100......
  • 基于ChatGPT的文档知识库客服系统-支持上传网址/文本/docx等数据
    现在,很多公司都有自己的内容知识库,会产生大量的碎片话的内部知识,但是这样内部知识难以整合搜索。我开发的文档知识库客服系统gofly.v1kf.com,可以应用于企业内部知识库管理,用户可以使用自然语言提问,让ChatGPT自动归纳总结企业知识信息,帮助员工快速获取所需知识,提升资源流转效率......
  • 4.[1201D - Treasure Hunting](https://codeforces.com/problemset/problem/1201/D)
    4.1201D-TreasureHunting题目意思:在一个n*m的地图上面,左下角的坐标是(1,1),最开始你位于左下角,一秒钟你可以进行往左或者往右的操作,你只能在一些特殊的列上面进行往上移动的操作,你不可以往下移动。现在告诉你k个宝藏的坐标信息以及哪些列是允许往上的,问最后至少要几秒可以遍历k......
  • 解决上传md文件时出现的“<Fault 401: '请配置正确的用户名与访问令牌(access token),
    使用的工具:pycnbolg下载地址:https://github.com/dongfanger/pycnblog具体操作按这位大神的博客:如何在博客园上传markdown文件-NotYourferry-博客园(cnblogs.com)出现报错如图:偶然看到这两位的评论:于是我将config.yaml中的password改成了我的令牌,就上传成功了。......
  • Java中 HTTP下载 常用的需要设置的MIME类型
    .docapplication/msword.dotapplication/msword.docxapplication/vnd.openxmlformats-officedocument.wordprocessingml.document.dotxapplication/vnd.openxmlformats-officedocument.wordprocessingml.template.docmapplication/vnd.ms-wo......
  • ASP.NET Core MVC 从入门到精通之HttpContext
    随着技术的发展,ASP.NETCoreMVC也推出了好长时间,经过不断的版本更新迭代,已经越来越完善,本系列文章主要讲解ASP.NETCoreMVC开发B/S系统过程中所涉及到的相关内容,适用于初学者,在校毕业生,或其他想从事ASP.NETCoreMVC系统开发的人员。经过前几篇文章的讲解,初步了解ASP.NETCore......