开发者社区> 问答> 正文

请问OSSCSDK上传文件支持中文吗?

测试的时候用的oss_put_object_from_file,filename传递的是一个中文命名的文件,结果报错error_code OpenFileFail,此文件确定没有被占用也不是只读文件,且同路径下的英文名文件可以正常上传,不知道是不是中文的文件或者中文路径下的文件都无法上传呢?

展开
收起
samhuang1987 2015-11-20 16:27:39 10812 0
6 条回答
写回答
取消 提交回答
  • Re请问OSSCSDK上传文件支持中文吗?
    调用curl库函数请求文件上传授权总是返回这个parse json fail, Too much connections in one mintue,Please try later  
    各位大神,麻烦知道的说下,谢谢了.
    2019-01-16 17:28:23
    赞同 展开评论 打赏
  • 阿里云用户
    回 18楼(ccsu_zc) 的帖子
    请勿这样回复,建议重新开一帖说明问题。你这样发很多人以为已经解决而看不到第二页你的问题
    2018-11-16 22:40:46
    赞同 展开评论 打赏
  • 回 1楼yjseu的帖子
    您好,我用这个方式改了之后,中文路径还是上传不了,oss返回errorcode=openFileError
    2018-11-13 11:49:53
    赞同 展开评论 打赏
  • Re请问OSSCSDK上传文件支持中文吗?
        res = oss_write_request_body_from_file(options->pool, filename, req);
        if (res != AOSE_OK) {
            aos_file_error_status_set(s, res);
            return s;
        }

    0x01ed8bd0 {code=-983 error_code=0x731fca30 "OpenFileFail" error_msg=0x00000000 <错误的指针> ...}

    -------------------------

    Re请问OSSCSDK上传文件支持中文吗?
    上传时apr_file_info_get执行失败

    int aos_open_file_for_read(aos_pool_t *p, const char *path, aos_file_buf_t *fb)
    {
        int s;
        char buf[256];
        apr_finfo_t finfo;

        if ((s = apr_file_open(&fb->file, path, APR_READ, APR_UREAD | APR_GREAD, p)) != APR_SUCCESS) {
            aos_error_log("apr_file_open failure, code:%d %s.", s, apr_strerror(s, buf, sizeof(buf)));
            assert(fb->file == NULL);
            return AOSE_OPEN_FILE_ERROR;
        }

        // 上传时,这里执行失败
        if ((s = apr_file_info_get(&finfo, APR_FINFO_NORM, fb->file)) != APR_SUCCESS) {
            apr_file_close(fb->file);
            aos_error_log("apr_file_open failure, code:%d %s.", s, apr_strerror(s, buf, sizeof(buf)));
            return AOSE_FILE_INFO_ERROR;
        }
        fb->file_pos = 0;
        fb->file_last = finfo.size;
        fb->owner = 1;

        return AOSE_OK;
    }

    -------------------------

    Re请问OSSCSDK上传文件支持中文吗?
    1、路径没有中文
    2、有的电脑上传成功,有的就不行,就上面的-983错误

    -------------------------

    Re请问OSSCSDK上传文件支持中文吗?
    1、下载最新的sdk,aliyun_oss_c_sdk_v3.2.1,重新编译动态库,并且使用最新的三方动态库
    2、确定本地文件是否存在
    2016-12-09 19:54:23
    赞同 展开评论 打赏
  • 回 1楼yjseu的帖子
    这是要重新build OSS_C_SDK的lib文件吗?我用的是VS2012,也是这样操作?

    -------------------------

    回 3楼yjseu的帖子
    我把调用函数的CPP文件都照你说的改了编码,加上#pragma once  #pragma execution_character_set("utf-8") ,编译的时候报错,在注释中遇到意外的文件结束,不知道啥原因,没改前是GB2312,是没这个问题的

    -------------------------

    回 5楼yjseu的帖子
    1>------ 已启动生成: 项目: OSSTest (Visual Studio 2010), 配置: Debug Win32 ------
    1>  ObjectTest.cpp
    1>c:\users\administrator\desktop\osstest\osstest\objecttest.cpp : warning C4819: 该文件包含不能在当前代码页(936)中表示的字符。请将该文件保存为 Unicode 格式以防止数据丢失
    1>c:\users\administrator\desktop\osstest\osstest\objecttest.cpp(3): warning C4068: 未知的杂注
    1>c:\users\administrator\desktop\osstest\osstest\objecttest.cpp(128): error C2065: “headers”: 未声明的标识符
    1>c:\users\administrator\desktop\osstest\osstest\objecttest.cpp(142): error C2065: “headers”: 未声明的标识符
    1>c:\users\administrator\desktop\osstest\osstest\objecttest.cpp(146): error C2065: “headers”: 未声明的标识符
    1>c:\users\administrator\desktop\osstest\osstest\objecttest.cpp(310): error C2065: “complete_resp_headers”: 未声明的标识符
    1>c:\users\administrator\desktop\osstest\osstest\objecttest.cpp(312): error C2065: “complete_resp_headers”: 未声明的标识符
    1>c:\users\administrator\desktop\osstest\osstest\objecttest.cpp(333): fatal error C1071: 在注释中遇到意外的文件结束
    ========== 生成: 成功 0 个,失败 1 个,最新 0 个,跳过 0 个 ==========

    -------------------------

    回 7楼yjseu的帖子
    headers和complete_resp_headers是初始化过了的,都是按照C_Sdk中的例子来写的,没改成UTF-8未签名的编码前(默认GB2312)时编译是通过的,而且照你说的,在头文件声明后加上那两行也没有什么效果

    -------------------------

    回 7楼yjseu的帖子
    刚才的报错原因找到了,是因为改成UTF-8格式后,中文注释后面都要加一个空格才行,现在编译通过,但是发现变量中的中文乱码了,如图中的filename中的中文路径乱码依然会导致打开文件失败,不知道怎么解决呢?我是新手,请多指教!

    -------------------------

    回 10楼yjseu的帖子
    那我还是把测试程序发你帮我看一下吧,请问怎么发你呢?私信好像只能发文字信息?
    2015-11-20 16:42:15
    赞同 展开评论 打赏
  • 回 楼主(samhuang1987) 的帖子
    您好,这个问题是vs的编码问题,一个解决方法是在包含中文的.c文件中加入下面两行:
    #pragma once
    #pragma execution_character_set("utf-8")

    然后在File -> Advanced Save Options里面选择Unicode(UTF-8 without signature)选项,然后运行build,应该就可以了,请试一下

    -------------------------

    回 2楼(samhuang1987) 的帖子
    不需要build OSS_C_SDK的lib,只需要在你自己程序中加这两行就可以了。VS2012也是这样子的,你试一下,有结果了说一下。这个问题前面的帖子中已经做过说明

    -------------------------

    回 4楼(samhuang1987) 的帖子
    能把编译错误发一下吗?另外你说的在注释中遇到意外的文件结束,是什么意思

    -------------------------

    回 6楼(samhuang1987) 的帖子
    贴出的错误来看,headers和complete_resp_headers这两个变量没有声明或者初始化。另外
    #pragma once  
    #pragma execution_character_set("utf-8")
    注意这是两行,而不是一行,放在头文件声明之后,比如:
    ...
    #include "oss_config.h"
    #include "oss_test_util.h"


    #pragma once
    #pragma execution_character_set("utf-8")


    ...



    -------------------------

    回 9楼(samhuang1987) 的帖子
    建议先把中文注释去掉,把中文文件名的case跑过去。如果还不行的话我私信你,你把测试程序发我看一下,我来帮你解决这个问题,这个问题已经时间有点长了

    -------------------------

    回 11楼(samhuang1987) 的帖子
    已经通过论坛的私信给你了,发我邮箱吧,这个问题我看一下

    -------------------------

    回 11楼(samhuang1987) 的帖子
    邮件已回复,请查收一下,希望对您有所帮助
    2015-11-20 16:34:50
    赞同 展开评论 打赏
滑动查看更多
问答分类:
问答地址:
问答排行榜
最热
最新

相关电子书

更多
JCLI使用说明文档 立即下载
低代码开发师(初级)实战教程 立即下载
阿里巴巴DevOps 最佳实践手册 立即下载