mirror of
https://github.com/ZLMediaKit/ZLMediaKit.git
synced 2024-11-22 10:40:05 +08:00
获取文件大小功能移至zltoolkit
This commit is contained in:
parent
0e0608dc27
commit
b4327b9b18
@ -1 +1 @@
|
||||
Subproject commit 45cf7795835625d07b4de33b25f151330fccc769
|
||||
Subproject commit 7923e9646f1779d8ce8f256c7f9c0a5bee69e7d7
|
@ -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<FILE> 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<FILE> &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<FILE> &fp,size_t offset, size_t max_size){
|
||||
void HttpFileBody::init(const std::shared_ptr<FILE> &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<HttpFileBody>(fp, 0, fileSize(fp.get()));
|
||||
_fileBody = std::make_shared<HttpFileBody>(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;
|
||||
}
|
||||
|
@ -108,7 +108,7 @@ public:
|
||||
* @param offset 相对文件头的偏移量
|
||||
* @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() 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:
|
||||
|
@ -598,7 +598,7 @@ void HttpResponseInvokerImp::responseFile(const StrCaseMap &requestHeader,
|
||||
auto &strRange = const_cast<StrCaseMap &>(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) {
|
||||
|
Loading…
Reference in New Issue
Block a user