Commit b4327b9b by ziyue

获取文件大小功能移至zltoolkit

parent 0e0608dc
ZLToolKit @ 7923e964
Subproject commit 45cf7795835625d07b4de33b25f151330fccc769 Subproject commit 7923e9646f1779d8ce8f256c7f9c0a5bee69e7d7
...@@ -10,6 +10,7 @@ ...@@ -10,6 +10,7 @@
#include "HttpBody.h" #include "HttpBody.h"
#include "Util/util.h" #include "Util/util.h"
#include "Util/File.h"
#include "Util/uv_errno.h" #include "Util/uv_errno.h"
#include "Util/logger.h" #include "Util/logger.h"
#include "HttpClient.h" #include "HttpClient.h"
...@@ -46,14 +47,14 @@ Buffer::Ptr HttpStringBody::readData(size_t size) { ...@@ -46,14 +47,14 @@ Buffer::Ptr HttpStringBody::readData(size_t size) {
HttpFileBody::HttpFileBody(const string &filePath){ HttpFileBody::HttpFileBody(const string &filePath){
std::shared_ptr<FILE> fp(fopen(filePath.data(), "rb"), [](FILE *fp) { std::shared_ptr<FILE> fp(fopen(filePath.data(), "rb"), [](FILE *fp) {
if(fp){ if (fp) {
fclose(fp); fclose(fp);
} }
}); });
if(!fp){ if (!fp) {
init(fp,0,0); init(fp, 0, 0);
}else{ } else {
init(fp,0,HttpMultiFormBody::fileSize(fp.get())); init(fp, 0, File::fileSize(fp.get()));
} }
} }
...@@ -61,15 +62,7 @@ HttpFileBody::HttpFileBody(const std::shared_ptr<FILE> &fp, size_t offset, size_ ...@@ -61,15 +62,7 @@ HttpFileBody::HttpFileBody(const std::shared_ptr<FILE> &fp, size_t offset, size_
init(fp,offset,max_size); init(fp,offset,max_size);
} }
#if defined(_WIN32) || defined(_WIN64) void HttpFileBody::init(const std::shared_ptr<FILE> &fp, size_t offset, size_t max_size) {
#define fseek64 _fseeki64
#define ftell64 _ftelli64
#else
#define fseek64 fseek
#define ftell64 ftell
#endif
void HttpFileBody::init(const std::shared_ptr<FILE> &fp,size_t offset, size_t max_size){
_fp = fp; _fp = fp;
_max_size = max_size; _max_size = max_size;
#ifdef ENABLE_MMAP #ifdef ENABLE_MMAP
...@@ -169,7 +162,7 @@ HttpMultiFormBody::HttpMultiFormBody(const HttpArgs &args,const string &filePath ...@@ -169,7 +162,7 @@ HttpMultiFormBody::HttpMultiFormBody(const HttpArgs &args,const string &filePath
if(!fp){ if(!fp){
throw std::invalid_argument(StrPrinter << "open file failed:" << filePath << " " << get_uv_errmsg()); throw std::invalid_argument(StrPrinter << "open file failed:" << filePath << " " << get_uv_errmsg());
} }
_fileBody = std::make_shared<HttpFileBody>(fp, 0, fileSize(fp.get())); _fileBody = std::make_shared<HttpFileBody>(fp, 0, File::fileSize(fp.get()));
auto fileName = filePath; auto fileName = filePath;
auto pos = filePath.rfind('/'); auto pos = filePath.rfind('/');
...@@ -222,14 +215,6 @@ string HttpMultiFormBody::multiFormBodySuffix(const string &boundary){ ...@@ -222,14 +215,6 @@ string HttpMultiFormBody::multiFormBodySuffix(const string &boundary){
return std::move(body); 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){ string HttpMultiFormBody::multiFormContentType(const string &boundary){
return StrPrinter << "multipart/form-data; boundary=" << boundary; return StrPrinter << "multipart/form-data; boundary=" << boundary;
} }
......
...@@ -108,7 +108,7 @@ public: ...@@ -108,7 +108,7 @@ public:
* @param offset 相对文件头的偏移量 * @param offset 相对文件头的偏移量
* @param max_size 最大读取字节数,未判断是否大于文件真实大小 * @param max_size 最大读取字节数,未判断是否大于文件真实大小
*/ */
HttpFileBody(const std::shared_ptr<FILE> &fp,size_t offset,size_t max_size); HttpFileBody(const std::shared_ptr<FILE> &fp, size_t offset, size_t max_size);
HttpFileBody(const string &file_path); HttpFileBody(const string &file_path);
~HttpFileBody() override = default; ~HttpFileBody() override = default;
...@@ -149,7 +149,6 @@ public: ...@@ -149,7 +149,6 @@ public:
public: public:
static string multiFormBodyPrefix(const HttpArgs &args,const string &boundary,const string &fileName); static string multiFormBodyPrefix(const HttpArgs &args,const string &boundary,const string &fileName);
static string multiFormBodySuffix(const string &boundary); static string multiFormBodySuffix(const string &boundary);
static size_t fileSize(FILE *fp);
static string multiFormContentType(const string &boundary); static string multiFormContentType(const string &boundary);
private: private:
......
...@@ -598,7 +598,7 @@ void HttpResponseInvokerImp::responseFile(const StrCaseMap &requestHeader, ...@@ -598,7 +598,7 @@ void HttpResponseInvokerImp::responseFile(const StrCaseMap &requestHeader,
auto &strRange = const_cast<StrCaseMap &>(requestHeader)["Range"]; auto &strRange = const_cast<StrCaseMap &>(requestHeader)["Range"];
size_t iRangeStart = 0; size_t iRangeStart = 0;
size_t iRangeEnd = 0; size_t iRangeEnd = 0;
size_t fileSize = HttpMultiFormBody::fileSize(fp.get()); size_t fileSize = File::fileSize(fp.get());
int code; int code;
if (strRange.size() == 0) { if (strRange.size() == 0) {
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论