poco服务端获取请求下发文件

        通过http请求返回文件,这时候返回的状态的一些参数可以添加到头部去如下

response.add("File-Path", strURL); // 添加自定义路径头部 

再在下面去解析

       我这里不是很标准的写法。按理来说应该失败之后响应码也应该放在头里面的

void DownloadFileRequestHandler::handleRequest(HTTPServerRequest& request, HTTPServerResponse& response)
{
	Application& app = Application::instance();
	//app.logger().information("Request from " + request.clientAddress().toString());
	std::string strUrl=request.getURI();
	
	std::string strUrlPath = strUrl.substr(strUrl.find("Path=")+5);
	std::string strFileName= strUrl.substr(strUrl.find_last_of("/"));
	
	try
	{
		std::string strURL;
		Poco::URI::decode(strUrlPath, strURL);
		Poco::FileInputStream  fileStream("./"+strURL);

		if (!fileStream) {
			response.setStatus(Poco::Net::HTTPResponse::HTTP_NOT_FOUND);
			response.send(); // 发送响应  
			return;
		}
		response.setStatus(Poco::Net::HTTPResponse::HTTP_OK);
		response.setContentType("application/octet-stream");
		response.setContentLength(static_cast<int>(fileStream.size())); // 设置文件大小
		response.add("File-Path", strURL); // 添加自定义路径头部  

		//std::cout <<"fileStream.rdbuf()" << fileStream.rdbuf()<<std::endl;
		response.send() << fileStream.rdbuf(); // 将文件内容写入响应  
		fileStream.close(); // 关闭文件输入流  
		return;
	}
	catch (const Poco::Exception& ex)
	{
		Poco::JSON::Object object(Poco::JSON_PRESERVE_KEY_ORDER);
		object.set("method", "DownloadFile");
		response.setStatus(Poco::Net::HTTPResponse::HTTP_NOT_FOUND);
		std::string _strErro = ex.displayText();
		std::cout << ex.displayText() << std::endl;
		object.set("errcode", "40");
		object.set("errmsg", _strErro);
		std::ostringstream ostr_stream;
		object.stringify(ostr_stream);
		std::ostream& out = response.send();
		out << ostr_stream.str();
	}


	
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

雁南1830

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值