From b4327b9b18ef91ace4b341136e7ea7b0f932376a Mon Sep 17 00:00:00 2001 From: ziyue <1213642868@qq.com> Date: Wed, 20 Oct 2021 18:09:37 +0800 Subject: [PATCH] =?UTF-8?q?=E8=8E=B7=E5=8F=96=E6=96=87=E4=BB=B6=E5=A4=A7?= =?UTF-8?q?=E5=B0=8F=E5=8A=9F=E8=83=BD=E7=A7=BB=E8=87=B3zltoolkit?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- 3rdpart/ZLToolKit | 2 +- src/Http/HttpBody.cpp | 31 ++++++++----------------------- src/Http/HttpBody.h | 3 +-- src/Http/HttpFileManager.cpp | 2 +- 4 files changed, 11 insertions(+), 27 deletions(-) diff --git a/3rdpart/ZLToolKit b/3rdpart/ZLToolKit index 45cf7795..7923e964 160000 --- a/3rdpart/ZLToolKit +++ b/3rdpart/ZLToolKit @@ -1 +1 @@ -Subproject commit 45cf7795835625d07b4de33b25f151330fccc769 +Subproject commit 7923e9646f1779d8ce8f256c7f9c0a5bee69e7d7 diff --git a/src/Http/HttpBody.cpp b/src/Http/HttpBody.cpp index f2e28efa..7dec29f1 100644 --- a/src/Http/HttpBody.cpp +++ b/src/Http/HttpBody.cpp @@ -10,6 +10,7 @@ #include "HttpBody.h" #include "Util/util.h" +#include "Util/File.h" #include "Util/uv_errno.h" #include "Util/logger.h" #include "HttpClient.h" @@ -46,14 +47,14 @@ Buffer::Ptr HttpStringBody::readData(size_t size) { HttpFileBody::HttpFileBody(const string &filePath){ std::shared_ptr fp(fopen(filePath.data(), "rb"), [](FILE *fp) { - if(fp){ + if (fp) { fclose(fp); } }); - if(!fp){ - init(fp,0,0); - }else{ - init(fp,0,HttpMultiFormBody::fileSize(fp.get())); + if (!fp) { + init(fp, 0, 0); + } else { + init(fp, 0, File::fileSize(fp.get())); } } @@ -61,15 +62,7 @@ HttpFileBody::HttpFileBody(const std::shared_ptr &fp, size_t offset, size_ init(fp,offset,max_size); } -#if defined(_WIN32) || defined(_WIN64) - #define fseek64 _fseeki64 - #define ftell64 _ftelli64 -#else - #define fseek64 fseek - #define ftell64 ftell -#endif - -void HttpFileBody::init(const std::shared_ptr &fp,size_t offset, size_t max_size){ +void HttpFileBody::init(const std::shared_ptr &fp, size_t offset, size_t max_size) { _fp = fp; _max_size = max_size; #ifdef ENABLE_MMAP @@ -169,7 +162,7 @@ HttpMultiFormBody::HttpMultiFormBody(const HttpArgs &args,const string &filePath if(!fp){ throw std::invalid_argument(StrPrinter << "open file failed:" << filePath << " " << get_uv_errmsg()); } - _fileBody = std::make_shared(fp, 0, fileSize(fp.get())); + _fileBody = std::make_shared(fp, 0, File::fileSize(fp.get())); auto fileName = filePath; auto pos = filePath.rfind('/'); @@ -222,14 +215,6 @@ string HttpMultiFormBody::multiFormBodySuffix(const string &boundary){ return std::move(body); } -size_t HttpMultiFormBody::fileSize(FILE *fp) { - auto current = ftell64(fp); - fseek64(fp, 0L, SEEK_END); /* 定位到文件末尾 */ - auto end = ftell64(fp); /* 得到文件大小 */ - fseek64(fp, current, SEEK_SET); - return end - current; -} - string HttpMultiFormBody::multiFormContentType(const string &boundary){ return StrPrinter << "multipart/form-data; boundary=" << boundary; } diff --git a/src/Http/HttpBody.h b/src/Http/HttpBody.h index fa097cb7..1f974fa8 100644 --- a/src/Http/HttpBody.h +++ b/src/Http/HttpBody.h @@ -108,7 +108,7 @@ public: * @param offset 相对文件头的偏移量 * @param max_size 最大读取字节数,未判断是否大于文件真实大小 */ - HttpFileBody(const std::shared_ptr &fp,size_t offset,size_t max_size); + HttpFileBody(const std::shared_ptr &fp, size_t offset, size_t max_size); HttpFileBody(const string &file_path); ~HttpFileBody() override = default; @@ -149,7 +149,6 @@ public: public: static string multiFormBodyPrefix(const HttpArgs &args,const string &boundary,const string &fileName); static string multiFormBodySuffix(const string &boundary); - static size_t fileSize(FILE *fp); static string multiFormContentType(const string &boundary); private: diff --git a/src/Http/HttpFileManager.cpp b/src/Http/HttpFileManager.cpp index bb13376e..dec1cd0b 100644 --- a/src/Http/HttpFileManager.cpp +++ b/src/Http/HttpFileManager.cpp @@ -598,7 +598,7 @@ void HttpResponseInvokerImp::responseFile(const StrCaseMap &requestHeader, auto &strRange = const_cast(requestHeader)["Range"]; size_t iRangeStart = 0; size_t iRangeEnd = 0; - size_t fileSize = HttpMultiFormBody::fileSize(fp.get()); + size_t fileSize = File::fileSize(fp.get()); int code; if (strRange.size() == 0) {