Superagent为什么不保留有关这部电影的任何信息?

时间:2019-07-14 14:28:56

标签: video put superagent

我有一个反应设置,我正在使用超级代理将文件上传到google存储桶。该请求使用签名的url发送到存储桶,如下所示。第一部分是我们如何使用Filereader并从服务器获取签名的URL,第二部分是超级代理随后如何发出放置请求以将文件放入存储桶中。

const file = this.props.file
const reader = new FileReader()
reader.onload = () => {
  uploadService
    .getSignedURLs({
      files: [
        {
          fileName: file.name,
          contentType: file.type
        }
      ]
    }) 
    .then(
      response => {
        this.setState({
          urls: response.signed.map(function(data) {
            data['file'] = file
            return data
          })
        })
      },
      error => {
        // handleError
      } 
    ) 
}   
reader.readAsBinaryString(file)

稍后,在等待FileReader加载的单独函数中,我们执行以下操作,其中从服务器返回的标头是:

headers = {
    'Access-Control-Request-Header': 'Content-Type',
    'Content-Type': content_type,
    'Access-Control-Allow-Origin': access_control_allow_origin
}

...

  self = this;
  request
    .put(url)
    .set(headers)
    .attach(fileName, file)
    .on('progress', event => self.updateProgress(event.percent))
    .end((err, res) => {
      if (!err) {
        self.reportSuccess(fileName, endLocation)
        self.setState({ success: true, uploading: false })
      } else {
        self.setState({ uploading: false, fail: true })
      }
    })

问题是放入存储桶中的视频文件格式错误。即使它们与原始尺寸相同,也不会播放。我在上传的文件上运行了ffprobe,它说:

  

[mov,mp4,m4a,3gp,3g2,mj2 @ 0x7fcddd804c00]格式   仅以低分1检测到mov,mp4,m4a,3gp,3g2,mj2   可能会误检测! [mov,mp4,m4a,3gp,3g2,mj2 @ 0x7fcddd804c00] moov   找不到原子/path/to/file.mov:处理时发现无效数据   输入

原件上写着:

  

元数据:       major_brand:mp42       minor_version:0       compatible_brands:isommp42       creation_time:2018-09-08T05:16:54.000000Z持续时间:00:00:26.77,开始:0.000000,比特率:9094 kb / s       流#0:0(und):视频:h264(高)(avc1 / 0x31637661),yuv420p(tv,bt709),1920x1080 [SAR 1:1 DAR 16:9],9020 kb / s,30 fps,   30吨,15360吨,60吨(默认)       元数据:         handler_name:VideoHandler       流#0:1(und):音频:aac(LC)(mp4a / 0x6134706D),44100 Hz,单声道,fltp,95 kb / s(默认)       元数据:         creation_time:2018-09-09T23:00:53.000000Z         handler_name:IsoMedia文件,由Google制作,2011年5月11日

我通过加载文件,然后立即将其保存(使用此便捷功能-https://stackoverflow.com/a/30832210/592419)到本地,从而进行了进一步的测试,以查看它是否为FileReader。没问题,这让我认为问题一定出在Put请求中。

1 个答案:

答案 0 :(得分:0)

这里的答案是不使用import SwiftUI struct HomeButton<Content>: View where Content: View { init(destination: Content, icon: String, title: String, description: String, color: Color, width: Length = .zero) { self.destination = destination self.icon = icon self.title = title self.description = description self.color = color self.width = width } let destination: Content let icon: String let title: String let description: String let color: Color let width: Length var body: some View { NavigationLink(destination: destination) { Group { ZStack { Circle() .foregroundColor(color) .frame(width: 60, height: 60) Text(icon) .font(.system(size: 55)) .offset(x: -25, y: 20) }.offset(x: 12.5, y: 0) VStack { Text(title) .fontWeight(.bold) .accentColor(.black) Text(description) .accentColor(.black) }.padding(.top, 0) } .frame(width: width == .zero ? nil : width) .padding(.top, 30) .padding(.bottom, 30) .padding(.leading, 45) .padding(.trailing, 45) } .background( Color.white .cornerRadius(6) .shadow(color: Color.lightGray, radius: 20)) } } ,而是使用attach。前者会分段上传,并且不会保留元数据。