实现上传文件到服务器上

前言:
我使用nginx 在阿里云服务器上搭建了静态资源文件服务器。

下面是实现上传的代码。
uploadController

  @CrossOrigin
    @PostMapping(value = "upload")
    public RespBean upload(@RequestParam("file") MultipartFile file,Integer sid , Integer aid ,String uid) {
        if (file.isEmpty()) {
            return new RespBean(400, "请选择文件", null);
        }
        String fileName = file.getOriginalFilename();
        String [] fileSuffix = file.getContentType().split("/");

        ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
        String key;
        //如果是图片则上传到七牛云并形成外链
        if (PictureType.isInclude(fileSuffix[1])) {
            byte[] uploadBytes;
            Map<String, String> map = new HashMap<>();
            //如果文件大小超过5M进行压缩
            if (file.getSize() >= 5 * 1024 * 1024) {
                try {
                    Thumbnails.of(file.getInputStream())
                            .scale(1f)
                            .outputQuality(0.5f)
                            .outputFormat("jpg")
                            .toOutputStream(outputStream);
                    uploadBytes = outputStream.toByteArray();
                    fileName = SHA.SHA256(outputStream);
                    map = QiNiuPicture.upload(fileName, uploadBytes);
                } catch (IOException | NoSuchAlgorithmException e) {
                    e.printStackTrace();
                    System.out.println("图片压缩失败");
                }
            } else {
                try {
                    uploadBytes = file.getBytes();
                    outputStream.write(uploadBytes);
                    fileName = SHA.SHA256(outputStream);
                    map = QiNiuPicture.upload(fileName, uploadBytes);
                } catch (IOException | NoSuchAlgorithmException e) {
                    e.printStackTrace();
                }
            }
            if (map.containsKey("key")) {
                key = map.get("key");
                String outerChain = QiNiuPicture.outerChainBuild(key);
                if (outerChain == null) {
                    return easyRespBean.err();
                }
                return easyRespBean.ok(outerChain);
            }
        } else {
            //非图片文件本地保存
            String url = baseUrl + uid+"/"+fileSuffix[0]+"/" + fileName ;

            try {
                createDir(uid+"/"+fileSuffix[0]);
                File dest = new File(filePath+ uid+"/"+fileSuffix[0] +"/"+ fileName);
                file.transferTo(dest);
                int result = fileService.upLoadFile(fileName,url,fileSuffix[0],uid,aid,sid);
                if(result == 0)
                    return easyRespBean.ok(url);
                else
                    return easyRespBean.errWithMsg("上传失败");
            } catch (IOException e) {
                e.printStackTrace();
                return easyRespBean.errWithMsg("上传失败");
            }
        }

        return easyRespBean.errWithMsg("上传失败");
    }

这可以实现在nginx配置的根目录,按照文件类型放置上传的文件。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要在C语言中实现将文件上传到HTTPS服务器,可以遵循以下步骤: 1. 导入所需的头文件:例如,`stdio.h`用于文件操作,`curl/curl.h`用于HTTP请求。 2. 初始化Curl库:使用`curl_global_init`函数初始化Curl库。 3. 创建Curl句柄:使用`curl_easy_init`函数创建Curl句柄。 4. 设置URL和其他选项:使用`curl_easy_setopt`函数设置HTTPS服务器的URL和其他选项,例如要上传的文件路径,认证信息等。 5. 打开要上传的文件:使用`fopen`函数打开待上传的文件,获取文件指针。 6. 设置文件读取回调函数:使用`curl_easy_setopt`函数设置读取回调函数,以便Curl库可以读取文件内容。 7. 执行上传操作:使用`curl_easy_perform`函数执行上传操作。 8. 关闭文件和Curl句柄:使用`fclose`函数关闭文件指针,使用`curl_easy_cleanup`函数清理Curl句柄。 9. 清理Curl库:使用`curl_global_cleanup`函数清理Curl库。 以下是一个示例代码,用于上传文件到HTTPS服务器: ```c #include <stdio.h> #include <curl/curl.h> // 回调函数,用于读取要上传文件的内容 static size_t read_callback(void *ptr, size_t size, size_t nmemb, void *stream) { FILE *file = (FILE *)stream; size_t retcode = fread(ptr, size, nmemb, file); return retcode; } int main(void) { CURL *curl; FILE *file; const char *url = "https://example.com/upload"; // 上传的目标URL const char *file_path = "/path/to/file.txt"; // 要上传的文件路径 curl_global_init(CURL_GLOBAL_DEFAULT); curl = curl_easy_init(); if(curl) { // 设置URL curl_easy_setopt(curl, CURLOPT_URL, url); // 设置SSL验证选项等... // 打开要上传的文件 file = fopen(file_path, "rb"); if(file) { // 设置读取回调函数 curl_easy_setopt(curl, CURLOPT_READFUNCTION, read_callback); curl_easy_setopt(curl, CURLOPT_READDATA, file); // 执行上传操作 curl_easy_perform(curl); // 关闭文件 fclose(file); } // 清理Curl句柄 curl_easy_cleanup(curl); } // 清理Curl库 curl_global_cleanup(); return 0; } ``` 请注意,上述代码仅提供了上传文件的基本框架,需要根据具体情况进行适当修改和完善,例如添加SSL证书验证等安全机制。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值